可惜没如果=_=
时光的河入海流

1089: [SCOI2003]严格n元树

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 1955  Solved: 989
[Submit][Status][Discuss]

Description

  如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树。如果该树中最底层的节点深度为d
(根的深度为0),那么我们称它为一棵深度为d的严格n元树。例如,深度为2的严格2元树有三个,如下图:

  给出n, d,编程数出深度为d的n元树数目。

Input

  仅包含两个整数n, d( 0   <   n   <   =   32,   0  < =   d  < = 16)

Output

  仅包含一个数,即深度为d的n元树的数目。

Sample Input

【样例输入1】
2 2

【样例输入2】
2 3

【样例输入3】
3 5

Sample Output

【样例输出1】
3

【样例输出2】
21

【样例输出2】
58871587162270592645034001

HINT

 

Source

阿西吧辣鸡高精度千进制mmp

python大法好!

f[i]=f[i-1]^n+1    cout<<f[d]-f[d-1];

1 n,d=map(int, raw_input().split())
2 if d==0:
3     print 1
4 else:
5     f=[1]
6     for i in range(0, d+1):
7         f.append(f[i]**n+1)
8     print f[d]-f[d-1]

laj的辣鸡十进制高精度…… _(:зゝ∠)_

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 typedef long long LL;
 4 const int MAX=20005;
 5 int n,m;
 6 struct Node{
 7     int a[MAX];
 8     Node (){memset(a,0,sizeof(a));}
 9     Node operator * (const Node &tt) {
10         Node an;
11         an.a[0]=a[0]+tt.a[0];
12         int i,j;
13         for (i=1;i<=a[0];i++)
14             for (j=1;j<=tt.a[0];j++)
15                 an.a[i+j-1]+=a[i]*tt.a[j],
16                 an.a[i+j]+=an.a[i+j-1]/10,
17                 an.a[i+j-1]%=10;
18         while (an.a[an.a[0]]==0) an.a[0]--;
19         return an;
20     }
21     Node operator + (const Node &tt) {
22         int i,j;
23         Node an;an.a[0]=max(a[0],tt.a[0])+1;
24         for (i=1;i<=max(a[0],tt.a[0]);i++){
25             an.a[i]+=a[i]+tt.a[i];
26             an.a[i+1]+=an.a[i]/10;
27             an.a[i]%=10;
28         }
29         while (an.a[an.a[0]]==0) an.a[0]--;
30         return an;
31     }
32     Node operator - (const Node &tt) {
33         int i,j;
34         Node an; an.a[0]=a[0];
35         for (i=1;i<=a[0];i++){
36             if (a[i]<tt.a[i]) a[i+1]--,a[i]+=10;
37             an.a[i]=a[i]-tt.a[i];
38         }
39         while (an.a[an.a[0]]==0) an.a[0]--;
40         return an;
41     }
42     void out(){
43         int i,j;
44         for (i=a[0];i>=1;i--) printf("%d",a[i]);
45     }
46 }f[55];
47 Node ksm(Node x,int y){
48     Node an;an.a[0]=an.a[1]=1;
49     while (y){
50         if (y&1) an=an*x;
51         x=x*x;
52         y>>=1;
53     }
54     return an;
55 }
56 int main(){
57     freopen ("tree.in","r",stdin);freopen ("tree.out","w",stdout);
58     int i,j;
59     scanf("%d%d",&n,&m);
60     f[0].a[0]=f[0].a[1]=1;
61     for (i=1;i<=m;i++)
62         f[i]=ksm(f[i-1],n)+f[0];
63     Node ans=f[m]-f[m-1];
64     ans.out();
65     return 0;
66 }

 

posted on 2017-11-01 01:00  珍珠鸟  阅读(193)  评论(0编辑  收藏  举报