社区讨论

60分RE求调

P1087[NOIP 2004 普及组] FBI 树参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m1g9kqri
此快照首次捕获于
2024/09/24 17:58
去年
此快照最后确认于
2025/11/04 18:57
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
vector<int> m;
int work(int beg, int end, int root) {
    if (end == beg) {
        if (s[beg] == '0') { m[root] = 0; return 0; }
        if (s[beg] == '1') { m[root] = 1; return 1; }
    }int mid = (beg + end) / 2;
    int l1 = work(beg, mid, root * 2), l2 = work(mid + 1, end, root * 2 + 1);
    if (l1 == 1 && l2 == 1) { m[root] = 1; return 1; }
    else if (!l1 && !l2) { m[root] = 0; return 0; }
    else { m[root] = 2; return 2; }
}void print(int root) {
    if (root >= m.size() || m[root] == -1) return;
    print(root * 2);
    print(root * 2 + 1);
    if (m[root] == 0) cout << "B";
    if (m[root] == 1) cout << "I";
    if (m[root] == 2) cout << "F";
}int main() {
    cin >> n;
    n = 1 << n;
    cin >> s;
    s = " " + s;
    int size = 1 << (n + 2);
    m.resize(size, -1);
    work(1, n, 1);
    print(1);
}
60point 2、8、9、10 RE 求调

回复

0 条回复,欢迎继续交流。

正在加载回复...