FBI树
FBI树
https://ac.nowcoder.com/acm/problem/16660
#include <iostream> #include <vector> #include <bits/stdc++.h> #define minn -10000 using namespace std; typedef long long ll; int n; string s; ll cnt1=0,cnt2=0;//1统计1数量 2统计2数量 void deal(int l,int r)//按照左右根输出 { if(l==r)//递归边界 { if((s[l]-'0')&1) cout<<"I"; else cout<<"B"; return ; } else { int mid=(l+r)>>1; deal(l,mid);//左子树 deal(mid+1,r);//右子树 } cnt1=0;cnt2=0; for(int i=l;i<=r;i++)//处理根结点,判断01的数量就可以推得根 { if(((s[i]-'0')&1)) cnt1++; else cnt2++; } if(!cnt1) cout<<"B"; else if(!cnt2) cout<<"I"; else cout<<"F"; } int main() { int n; cin>>n; cin>>s; int m=pow(2,n); deal(0,m-1); }