洛谷 NOIP2004 FBI樹 遞迴

2021-09-27 04:45:15 字數 2045 閱讀 4972

時間限制:1.00s記憶體限制:125.00mb

我們可以把由「0

00」和「1

11」組成的字串分為三類:全「0

00」串稱為b

bb串,全「1

11」串稱為i

ii串,既含「0

00」又含「1

11」的串則稱為f

ff串。

f bi

fbifb

i樹是一種二叉樹,它的結點型別也包括f

ff結點,b

bb結點和i

ii結點三種。由乙個長度為2

n2^n

2n的「01

0101

」串s

ss可以構造出一棵fbi

fbifb

i樹tt

t,遞迴的構造方法如下:

t

tt的根結點為r

rr,其型別與串s

ss的型別相同;

若串s

ss的長度大於1

11,將串s

ss從中間分開,分為等長的左右子串s

1s_1

s1​和s

2s_2

s2​;由左子串s

1s_1

s1​構造r

rr的左子樹t

1t_1

t1​,由右子串s

2s_2

s2​構造r

rr的右子樹t

2t_2

t2​。

現在給定乙個長度為2

n2^n

2n的「01

0101

」串,請用上述構造方法構造出一棵fbi

fbifb

i樹,並輸出它的後序遍歷序列。

第一行是乙個整數n(0

≤n≤10

)n(0 \le n \le 10)

n(0≤n≤

10),

第二行是乙個長度為2

n2^n

2n的「01

0101

」串。乙個字串,即fbi

fbifb

i樹的後序遍歷序列。

輸入 #1

3

10001011

輸出 #1
ibfbbbfibfiiiff

對於40%的資料,n≤2

n \le 2

n≤2;

對於全部的資料,n≤10

n \le 10

n≤10

題意:給你乙個01串,讓你構造乙個fbi樹,並輸出它的後序遍歷。

思路:按題意模擬,後序遍歷:先左兒子,後右兒子,最後根。判斷根的時候看看左右孩子是否全為1,全為0,還是有1又有0,根據這來判斷是i, b還是f。

accepted code:

/* 

* @author: lzyws739307453

* @language: c++

*/#include

using

namespace std;

const

int maxn =

1e5+5;

char str[maxn]

;void

fbi(

int l,

int r)

while

(p <= r)

cnt +

= str[p++]-

'0';

if(cnt && cnt < r - l +1)

printf

("f");

else

if(cnt)

printf

("i");

else

printf

("b");

}int

main()

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.接下來程式設計實...

NOIP2004T3FBI樹解題報告

原題見洛谷 我們可以把由 0 和 1 組成的字串分為三類 全 0 串稱為b串,全 1 串稱為i串,既含 0 又含 1 的串則稱為f串。fbi樹是一種二叉樹,它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2 n的 01 串s可以構造出一棵fbi樹t,遞迴的構造方法如下 1 t的根結點為r,...

樹 洛谷 P1087 FBI樹

我們可以把由 0 和 1 組成的字串分為三類 全 0 串稱為b串,全 1 串稱為i串,既含 0 又含 1 的串則稱為f串。fbi樹是一種二叉樹,它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2 n的 01 串s可以構造出一棵fbi樹t,遞迴的構造方法如下 1 t的根結點為r,其型別與串s...