[FBI 树]
2025-08-30 14:48:12
发布于:广东
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e3 + 9;
char s[maxn];
//处理l~r的字符串,其长度是2^x。如果该字符串只包含0,返回1,如果只包含1,返回2,否则返回3。
int dfs(int l, int r, int x) {
if (l == r) { //只有一个结点直接输出并返回
if (s[l] == '0') {
cout << "B";
return 1;
}
cout << "I";
return 2;
}
int ans = 0;//1:字符串只包含0 2:只包含1 3:包含0和1
//整个串是由左半串和右半串组成
ans |= dfs(l, l + (1 << (x - 1)) - 1, x - 1);
ans |= dfs(l + (1 << (x - 1)), r, x - 1);
if (ans == 1) cout << "B";
else if (ans == 2) cout << "I";
else cout << "F";
return ans;
}
int main() {
int n;
cin >> n;
cin >> (s + 1);
dfs(1, 1 << n, n);
return 0;
}
这里空空如也
有帮助,赞一个