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...