首页 > 其他 > 详细

[bzoj1089]严格n元树

时间:2019-11-07 14:46:25      阅读:77      评论:0      收藏:0      [点我收藏+]

设f[i]表示深度不超过i的方案数,那么有f[0]=1,$f[i]=f[i-1]^{n}+1$,然后用高精度即可(注意深度恰好为d还要用f[d]-f[d-1]才是答案)

技术分享图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct ji{
 4     int a[1005];
 5 }a,s,ans;
 6 int n,d;
 7 void jia(){
 8     for(int i=1;i<=ans.a[0]+1;i++)
 9         if (ans.a[i]==9)ans.a[i]=0;
10         else{
11             ans.a[i]++;
12             ans.a[0]=max(ans.a[0],i);
13             break;
14         }
15 }
16 void jian(){
17     for(int i=1;i<=ans.a[0];i++){
18         if (s.a[i]>ans.a[i]){
19             ans.a[i+1]--;
20             ans.a[i]+=10;
21         }
22         ans.a[i]-=s.a[i];
23     }
24     while ((ans.a[0]>1)&&(!ans.a[ans.a[0]]))ans.a[0]--;
25 }
26 void cheng(){
27     memset(a.a,0,sizeof(a.a));
28     a.a[0]=ans.a[0]+s.a[0]-1;
29     for(int i=1;i<=s.a[0];i++)
30         for(int j=1;j<=ans.a[0];j++)a.a[i+j-1]+=s.a[i]*ans.a[j];
31     ans=a;
32     for(int i=2;i<=ans.a[0];i++){
33         ans.a[i]+=ans.a[i-1]/10;
34         ans.a[i-1]%=10;
35     }
36     while (ans.a[ans.a[0]]>9){
37         ans.a[ans.a[0]+1]=ans.a[ans.a[0]]/10;
38         ans.a[ans.a[0]++]%=10;
39     }
40 }
41 int main(){
42     scanf("%d%d",&n,&d);
43     ans.a[0]=ans.a[1]=1;
44     for(int i=1;i<=d;i++){
45         s=ans;
46         for(int j=1;j<n;j++)cheng();
47         jia();
48     }
49     jian();
50     for(int i=ans.a[0];i;i--)printf("%d",ans.a[i]);
51 }
View Code

 

[bzoj1089]严格n元树

原文:https://www.cnblogs.com/PYWBKTDA/p/11811493.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!