题解 | #fbi树#

[NOIP2004]FBI树

https://ac.nowcoder.com/acm/problem/16660

线段树

不懂的可以看线段树1 这里直接使用build函数

using namespace std;int n;
const int N=1027;
char tree[N<<2];
int a[N];
void pushup(int q){
	if(tree[q<<1]!=tree[q<<1|1]){
		tree[q]='F';
		return ;
	}
    if(tree[q<<1]=='F'||tree[q<<1]=='F') tree[q]='F';
	else if(tree[q<<1]=='I') tree[q]='I';
	else tree[q]='B';
}
void build(int q,int le,int ri){
	if(le==ri){
		if(a[le]==0) tree[q]='B';
		else tree[q]='I';
		return ;
	}
	int mid=le+ri>>1;
	build(q<<1,le,mid);
	build(q<<1|1,mid+1,ri);
	pushup(q);
}
void init(){
	cin>>n;n=1<<n;//cout<<n<<"\n";
    string s;cin>>s;
	for(int i=1;i<=n;i++){
        a[i]=s[i-1]-'0';
	}
    //for(int i=1;i<=n;i++) cout<<a[i]<<" ";
    //cout<<endl;
}
void suf(int q){
	if(tree[q<<1]) suf(q<<1);
	if(tree[q<<1|1]) suf(q<<1|1);
	cout<<tree[q];//<<q<<" ";
}
int main(){
	init();
	build(1,1,n);
	suf(1);
	return 0;
}
全部评论

相关推荐

01-30 09:45
燕山大学 Java
喵_coding:这种直接跑就完事了 哪有毕业了才签合同 任何offer和三方都没有的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务