日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FBI树(信息学奥赛一本通-T1365)

發布時間:2025/3/17 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FBI树(信息学奥赛一本通-T1365) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目描述】

我們可以把由“0”和“1”組成的字符串分為三類:全“0”串稱為B串,全“1”串稱為I串,既含“0”又含“1”的串則稱為F串。

FBI樹是一種二叉樹,它的結點類型也包括F結點,B結點和I結點三種。由一個長度為2N的“01”串S可以構造出一棵FBI樹T,遞歸的構造方法如下:

T的根結點為R,其類型與串S的類型相同;

若串S的長度大于1,將串S從中間分開,分為等長的左右子串S1和S2;由左子串S1構造R的左子樹T1,由右子串S2構造R的右子樹T2。

現在給定一個長度為2N的“01”串,請用上述構造方法構造出一棵FBI樹,并輸出它的后序遍歷序列。

【輸入】

第一行是一個整數N(0 ≤ N ≤ 10),第二行是一個長度為2N的“01”串。

【輸出】

一行,這一行只包含一個字符串,即FBI樹的后序遍歷序列。

【輸入樣例】

3
10001011

【輸出樣例】

IBFBBBFIBFIIIFF

【提示】

【源程序】

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 3001 #define MOD 123 #define E 1e-6 using namespace std; int n; char a[N],b[N]; void build(char *s,int n) {int k=0;for(int i=(1<<n);i<=(1<<(n+1))-1;i++){if(a[k++]=='0')b[i]='B';elseb[i]='I';}for(int i=n-1;i>=0;i--)for(int j=(1<<i);j<=(1<<(i+1))-1;j++){if(b[2*j]=='B'&&b[2*j+1]=='B')b[j]='B';else if(b[2*j]=='I'&&b[2*j+1]=='I')b[j]='I';elseb[j]='F';} } void visit(int node) {if(node>( 1<<(n+1))-1 )return;visit(node*2);visit(node*2+1);cout<<b[node]; } int main() {cin>>n;cin>>a;build(a,n);visit(1);return 0; }

?

?

?

總結

以上是生活随笔為你收集整理的FBI树(信息学奥赛一本通-T1365)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。