本题已经说明了从中间分开,看子串。遇到这种首先就想到树形结构,紧接着就想到要递归,然后怎么帝国呢?通过递归,返回当前串的子串的信息,如果左右两个子串是相同类型的,那么当前串的类型一定也是这个类型,反之如果不同,那么该串类型为F

#include<iostream>
using namespace std;
string s;
char FBI(int l,int r)
{
	if(l==r)
    {
    	if(s[l]=='0'){
        cout<<"B";
        return "B";
        }
        else{
        cout<<"I";
        return "I";
        }
    }
    int mid=(l+r)>>1;
    char a=FBI(l,mid);
    char b=FBI(mid+1,r);
    if(a==b&&a=="B"){
    	cout<<"B";
        return "B";
        }
    if(a==b&&a=="I"){
    	cout<<"I";
        return "I";
        }
     cout<<"F";
     return "F";
}
int main()
{
	int n;
    cin>>n>>str;
    FBI(0,(1<<n)-1);
    return 0;
}