90分

P1087 [NOIP2004 普及组] FBI 树

```cpp #include<bits/stdc++.h> using namespace std; char a[2050]; void made_tree(string s,int k) { if(s.size()==0)return; if(s.find('1')!=-1&&s.find('0')!=-1)a[k]='F'; else if(s.find('0')==-1)a[k]='I'; else if(s.find('1')==-1)a[k]='B'; if(s.size()>=2){ made_tree(s.substr(0,s.size()/2),2*k); made_tree(s.substr(s.size()/2,s.size()/2),2*k+1); } } void put_tree(int k) { if(a[k]=='F'||a[k]=='B'||a[k]=='I') { put_tree(k*2); put_tree(k*2+1); cout<<a[k]; } } int main() { int n; string s; cin>>n; cin>>s; made_tree(s,1); put_tree(1); return 0; } ```
by liyunhe @ 2024-04-05 10:04:35


你将char a[2050]改成char a[205000]就行了
by xzy1303 @ 2024-04-13 11:08:49


@[xzy1303](/user/1046340) 谢谢! 我过了,其实a开5000就够了,大于2*2047+1即可
by liyunhe @ 2024-04-13 11:47:52


|