時間限制: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輸出 #110001011
ibfbbbfibfiiiff
對於40%的資料,n≤2題意:給你乙個01串,讓你構造乙個fbi樹,並輸出它的後序遍歷。n \le 2
n≤2;
對於全部的資料,n≤10
n \le 10
n≤10
。
思路:按題意模擬,後序遍歷:先左兒子,後右兒子,最後根。判斷根的時候看看左右孩子是否全為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...