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  } 

还是咱太菜了

posted @ 2022-04-18 15:36  江上舟摇  阅读(155)  评论(0)    收藏  举报