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