51Nod 1832 先序遍歷與後序遍歷

2021-08-07 18:23:27 字數 1407 閱讀 1678

acm模版

官方題解的思路十分的清晰,所以先看看官方題解:

也就是說決定樹的種類的是只擁有乙個兒子的結點個數 ct

,最後結果為 2c

t 。由於這裡的總結點數十分大,所以這裡的結果將會是乙個大數,那麼我們順其自然的引入大數,當然,如果你害怕不夠快,可以再加上乙個快速冪,當然,不加也是穩穩的,當然,剩下的就沒有啥了……看看**體會一下吧~~~需要熟練掌握先序和後序遍歷的性質。

#include 

#include

using

namespace

std;

const

int max_len = 666;

struct bigint

bigint(int v)

while (v);

}bigint operator * (const bigint &b) const

if (up != 0)

}res.len = len + b.len;

while (res.a[res.len - 1] == 0 && res.len > 1)

return res;

}void output()

printf("\n");

}};const

int maxn = 10010;

int n;

int ct = 0;

int a[maxn];

int b[maxn];

int get_id(int l, int r, int num)

}return -1;

}int calc(int num)

if (num == 2 || num == 0)

return0;}

void dfs(int a_l, int a_r, int b_l, int b_r)

a_l++;

b_r--;

int x = 0, cnt = a_r - a_l, id, ar, br;

while (cnt != 0)

ct += calc(x);

}int main()

for (int i = 0; i < n; ++i)

dfs(0, n, 0, n);

bigint res(1);

for (int i = 0; i < ct; i++)

res.output();

return

0;}

51nod 1832 先序遍歷與後序遍歷

標程 考慮乙個有兩個兒子的節點x,令x的左兒子為l,右兒子為r 則x子樹的先序遍歷和後序遍歷類似下圖 先序遍歷 x l r 後序遍歷 l r x 可以發現我們可以輕鬆地找出兩個兒子從而確定樹的形態。只有乙個兒子的話這個兒子既可以是左兒子也可以是右兒子。只需要統計有乙個兒子的節點數量即可。要用大整數 ...

1832 先序遍歷與後序遍歷

1832 先序遍歷與後序遍歷 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 對於給定的乙個二叉樹的先序遍歷和後序遍歷,輸出有多少種滿足條件的二叉樹。兩棵二叉樹不同當且僅當對於某個x,x的左兒子編號不同或x的右兒子編號不同。input 第一行乙個正整數n 3 n ...

51 nod 演算法馬拉松28 先序遍歷與後序遍歷

先序遍歷與後序遍歷 scape 命題人 tangjz 測試 基準時間限制 1 秒 空間限制 131072 kb 分值 40 對於給定的乙個二叉樹的先序遍歷和後序遍歷,輸出有多少種滿足條件的二叉樹。兩棵二叉樹不同當且僅當對於某個x,x的左兒子編號不同或x的右兒子編號不同。input 第一行乙個正整數n...