P1087 FBI树
暴力出奇迹 QWQ
题解
一棵FBI树
中间分两半
比1大继续分两半
后序遍历 左右头
分啊分啊分啊 合啊合啊合啊
最后你就做完了
不画图了,太水了,代码挺清晰的,看不清的举个手
代码
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<string> #include<cstring> #include<cstdlib> using namespace std; int n; int jc[12]={1,2,4,8,16,32,64,128,256,512,1024,2048}; int num[11]={1,3,7,15,31,63,127,255,511,1023,2047}; char a[50000]; int b[50000]; int dfs(int l,int r) { int zuo,you,tou; if((r-l)==0) { if(b[l]==0){cout<<"B"; return 0;} else if(b[l]==1) {cout<<"I"; return 1;} } else { zuo=dfs(l,l+(r-l)/2); you=dfs(l+(r-l)/2+1,r); if(zuo==1&&you==1) {cout<<"I"; return 1;} else if(zuo==0&&you==0) {cout<<"B"; return 0;} else {cout<<"F"; return 2;} } } int main() { int n; scanf("%d ",&n); gets(a); int k=jc[n]; for(int i=0;i<=k-1;i++) if(a[i]=='1') b[i+1]=1; else if(a[i]=='0') b[i+1]=0; dfs(1,k); return 0; }