NOIP2004普及組第3題 FBI樹

2022-05-12 21:41:18 字數 1453 閱讀 2167

/*

1106: noip2004普及組第3題 fbi樹     

時間限制: 1 sec 記憶體限制: 128 mb

提交: 10 解決: 9

[提交] [狀態] [討論版] [命題人:外部匯入]

題目描述

我們可以把由「0」和「1」組成的字串分為三類:全「0」串稱為b串,全「1」串稱為i串,既含「0」又含「1」的串則稱為f串。

fbi樹是一種二叉樹,它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2n的「01」串s可以構造出一棵fbi樹t,遞迴的構造方法如下:

1) t的根結點為r,其型別與串s的型別相同;

2) 若串s的長度大於1,將串s從中間分開,分為等長的左右子串s1和s2;由左子串s1構造r的左子樹t1,由右子串s2構造r的右子樹t2。

現在給定乙個長度為2n的「01」串,請用上述構造方法構造出一棵fbi樹,並輸出它的後序遍歷序列。

輸入第一行是乙個整數n(0 <= n <= 10),第二行是乙個長度為2n的「01」串。

輸出 包括一行,這一行只包含乙個字串,即fbi樹的後序遍歷序列。

【資料規模】

對於40%的資料,n <= 2;

對於全部的資料,n <= 10。

樣例輸入

310001011

樣例輸出

ibfbbbfibfiiiff

提示二叉樹:二叉樹是結點的有限集合,這個集合或為空集,或由乙個根結點和兩棵不相交的二叉樹組成。這兩棵不相交的二叉樹分別稱為這個根結點的左子樹和右子樹。

後序遍歷:後序遍歷是深度優先遍歷二叉樹的一種方法,它的遞迴定義是:先後序遍歷左子樹,再後序遍歷右子樹,最後訪問根。

noip

[提交] [狀態]

*/#include

using

namespace

std;

int a[1025

];void check(int l,int

r)

if(t0==1&&t1==1

) printf("f

");else

if(t0==1

) printf("b

");else

if(t1==1

) printf("i

");}void dfs(int l,int

r)

int mid=(l+r)>>1

; dfs(l,mid);

dfs(mid+1

,r);

check(l,r);

}int

main()

這一道題其實還是比較簡單的

後序遍歷就是先遍歷左子樹 再遍歷右子樹 最後遍歷根節點,所以這一道題只要從樹根開始跑乙個深搜dfs就行了

在跑深搜的過程中 先遍歷當前節點的左右子樹 再列印該節點的fbi值

NOIP 2004 普及組 複賽 FBI樹

noip 2004 普及組 複賽 fbi樹 1.閱讀題目,還有些不知所云。2.對樣例進行手動模擬,弄明白題意了。fbi樹如下圖所示 ff f f b f i i b b b i b i i 1 t的根結點為r,其型別與串s的型別相同 此句是核心中的核心,也即f b i三種根節點。3.接下來程式設計實...

普及 NOIP 2004 花生採摘

題目描述 魯賓遜先生和多多都很開心,因為花生正是他們的最愛。在告示牌背後,路邊真的有一塊花生田,花生植株整齊地排列成矩形網格 如圖1 有經驗的多多一眼就能看出,每棵花生植株下的花生有多少。為了訓練多多的算術,魯賓遜先生說 你先找出花生最多的植株,去採摘它的花生 然後再找出剩下的植株裡花生最多的,去採...

NOIP2004普及組 合併果子

題目描述 description 在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消...