1. 程式人生 > 其它 >pta L1-071 前世檔案

pta L1-071 前世檔案

評價:非常之狗血一道題,用模擬做會非常非常非常麻煩,別問我是怎麼知道的┮﹏┮

這道題用二叉樹性質好像非常好做,這裡在複習一下二叉樹的性質:

1、滿足本身是有序樹。
2、樹中包含的各個節點的度不能超過 2,即只能是 0、1 或者 2。
3、二叉樹具有以下幾個性質:
a:二叉樹中,第 i 層最多有 2的i-1次方個結點。
b:如果二叉樹的深度為 K,那麼此二叉樹最多有 2的k次方-1 個結點。
c:二叉樹中,終端結點數(葉子結點數)為 n0,度為 2 的結點數為 n2,則 n0=n2+1。
這裡也有完美二叉樹:

1.滿二叉樹中第 i 層的節點數為 2的i-1 次方個。
2.深度為 k 的滿二叉樹必有 2k次方-1 個節點 ,葉子數為 2的k-1次方。
3.滿二叉樹中不存在度為 1 的節點,每一個分支點中都兩棵深度相同的子樹,且葉子節點都在最底層。
4.具有 n 個節點的滿二叉樹的深度為 log2(n+1)。

很顯然,這道題就是一顆滿二叉樹,利用了上面劃線的性質;

Talk is cheap. Show me the code.

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m;
 4 int main()
 5 {
 6     cin>>n>>m;
 7     getchar();
 8     for(register int i=1;i<=m;i++)
 9     {
10         string s="";
11         int cnt=1;
12         getline(cin,s);
13 for(int j=0;j<n;j++) 14 { 15 if(s[j]=='n') 16 cnt+=pow(2,n-1-j);//二叉樹性質計算 17 } 18 cout<<cnt; 19 if(i<m) 20 cout<<endl; 21 } 22 23 return 0; 24 }

還是咱太菜了