0分玄关
查看原帖
0分玄关
1070431
ywtank楼主2024/9/22 08:20
#include <bits/stdc++.h>
using namespace std;
int n;
string s;
struct Po{
	int left;
	int right;
	char c;
	Po(){
		left=right=-1;//-1表示没有该点 
		c=0;
	}
}a[10000];
char pan(string s){
	int suma=0,sumb=0;
	for(int i=0;i<s.size();i++){
		if(s[i]=='0')suma++;
		else sumb++;
	}
	if(suma==0)return 'I';
	if(sumb==0)return 'B';
	return 'F';
}
void gz(string s,int i,bool b){//t左f右 
	if(s.size()<=1){
		if(b)a[i].left=2*i,a[2*i].c=pan(s); 
		else a[i].right=2*i+1,a[2*i+1].c=pan(s);
	}
	string a2=s.substr(0,(s.size()>>1)-1),b2=s.substr((s.size()>>1)+1);//抽取到末尾 
	a[i].left=2*i,a[i*2].c=pan(a2);
	a[i].right=2*i+1,a[i*2+1].c=pan(b2);
	gz(a2,2*i,true);
	gz(b2,2*i+1,false);
}
void print(int i){
	if(a[i].left==-1 && a[i].right==-1){
		cout << a[i].c;
		return;
	}
	if(a[i].left==-1){
		print(a[i].right);
		cout << a[i].c;
		return;
	}
	if(a[i].right==-1){
		print(a[i].left);
		cout << a[i].c;
		return;
	}
	print(a[i].left);
	print(a[i].right);
	cout << a[i].c;
}
int main(){
	cin >> n >> s;
	string a2=s.substr(0,(s.size()>>1)-1),b=s.substr((s.size()>>1)+1);//抽取到末尾
	a[1].c=pan(s);
	gz(a2,2*1,true);
	gz(b,2*1+1,false);
	print(1);
	return 0;
}
2024/9/22 08:20
加载中...