原题
#include <cstdio>
int n;
char s[1030];
void dfs(int begin, int end) {
if (begin == end) {putchar(s[begin] == '0' ? 'B' : 'I'); return;}
int mid = (begin + end) >> 1;
dfs(begin, mid), dfs(mid + 1, end);
bool h0 = 0, h1 = 0;
for (; begin <= end; ++begin) {
if (s[begin] == '0') h0 = 1;
else h1 = 1;
if (h0 && h1) {putchar('F'); return;}
}
putchar(h0 ? 'B' : 'I');
}
int main() {
scanf("%d%*c%s", &n, s), dfs(0, (1 << n) - 1);
}
我认为这份代码的复杂度是 O(n2n)。
如果我们把dfs函数得到的二叉树画出来,我们会发现:在同一层内,所有节点的区间长度和是 2n;总共会递归 n 层,总复杂度为 O(n2n)。
但是不太确定,于是在这里问问各位大佬qwq