洛谷:P1087 FBI树

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int N;
char input[2000];
char show(int ind,int num){
    //对当前串进行读取与输出
    int flag0=0,flag1=0;
    for(int i=0;i<num;i++){
        if(input[ind+i]=='0')flag0+=1;
        else flag1+=1;
    }
    switch( (flag0>0) + (flag1>0)*2 ){
    case 1:return 'B'
    case 2:return 'I';
    case 3:return 'F';
    }
    return '';
}
void f(int ind,int num){
    //读取/输出当前串-下一同长度串-总串,
    //读取/输出当前串需要对当前串的左半部分与右半部分进行处理。除非长度为1
    if(num>1){
        f(ind,num/2);
        f(ind+num/2,num/2);
    }
    cout<<show(ind,num);
}
int main(){
    cin>>N>>input;
    f(0,pow(2,N));

    return 0;
}

地址:https://www.luogu.com.cn/problem/P1087

原文地址:https://www.cnblogs.com/forwhat00/p/13220134.html