[BZOJ]1089: [SCOI2003]严格n元树 DP+高精度
来源:互联网 发布:无心法师白琉璃知乎 编辑:程序博客网 时间:2024/05/29 10:24
Description
如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树。如果该树中最底层的节点深度为d(根的深度为0),那么我们称它为一棵深度为d的严格n元树。给出n, d,编程数出深度为d的n元树数目。
Input
仅包含两个整数n, d( 0 < n < = 32, 0 < = d < = 16)
Output
仅包含一个数,即深度为d的n元树的数目。
题解:
设
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int M=10000;struct node{ int v[10010],l;}f[20];node operator * (node a,node b){ node c; c.l=a.l+b.l; for(int i=1;i<=c.l;i++)c.v[i]=0; for(int i=1;i<=a.l;i++) for(int j=1;j<=b.l;j++) c.v[i+j-1]+=a.v[i]*b.v[j]; for(int i=1;i<=c.l;i++) if(c.v[i]>=M) { if(i==c.l)c.v[++c.l]=c.v[i]/M; else c.v[i+1]+=c.v[i]/M; c.v[i]%=M; } while(c.l>1&&!c.v[c.l])c.l--; return c;}node operator + (node a,int b){ node c=a; c.v[1]+=b; for(int i=1;i<=c.l;i++) if(c.v[i]>=M) { if(i==c.l)c.v[++c.l]=c.v[i]/M; else c.v[i+1]+=c.v[i]/M; c.v[i]%=M; } return c;}node operator - (node a,node b){ node c; c.l=max(a.l,b.l); for(int i=1;i<=c.l;i++)c.v[i]=0; for(int i=1;i<=c.l;i++) { c.v[i]+=a.v[i]-b.v[i]; if(c.v[i]<0) { c.v[i]+=M; c.v[i+1]--; if(i+1==c.l&&c.v[i+1]==0)c.l--; } } while(c.l>1&&!c.v[c.l])c.l--; return c;}node p(node x,int y){ if(y==1)return x; node t=p(x,y>>1),ans=t*t; if(y&1)ans=ans*x; return ans;}int main(){ int n,d; scanf("%d%d",&n,&d); if(d==0){puts("1");return 0;} f[0].v[1]=1;f[0].l=1; for(int i=1;i<=d;i++)f[i]=p(f[i-1],n)+1; node ans=f[d]-f[d-1]; printf("%d",ans.v[ans.l]); for(int i=ans.l-1;i;i--) printf("%04d",ans.v[i]);}
阅读全文
2 0
- bzoj 1089 [SCOI2003]严格n元树(DP+高精度)
- bzoj 1089: [SCOI2003]严格n元树 (dp+高精度)
- [BZOJ 1089][SCOI2003]严格n元树:DP+高精度
- [BZOJ]1089: [SCOI2003]严格n元树 DP+高精度
- BZOJ 1089 SCOI2003 严格n元树 动态规划+高精度
- BZOJ 1089: [SCOI2003]严格n元树 递推,高精度
- BZOJ 1089: [SCOI2003]严格n元树 递推 高精度
- 1089: [SCOI2003]严格n元树 DP+高精度
- BZOJ 1089: [SCOI2003]严格n元树(dp+高精度快速幂)
- 【BZOJ 1089】 [SCOI2003]严格n元树
- 简单高精度模板(bzoj 1089: [SCOI2003]严格n元树)
- [BZOJ1089][SCOI2003]严格n元树(dp+数学相关+高精度)
- [BZOJ1089][SCOI2003][递推][高精度]严格n元树
- 【BZOJ1089】[SCOI2003]严格n元树【递推】【高精度】
- [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
- BZOJ1089(SCOI2003)[严格n元树]--递推+高精度
- 1089: [SCOI2003]严格n元树
- 1089: [SCOI2003]严格n元树
- zookeeper集群脚本启动与停用
- Python学习 ——enumerate函数
- C++ 虚函数表解析
- IDEA 配置lombok
- 《Drools7.0.0.Final规则引擎教程》第4章 global全局变量
- [BZOJ]1089: [SCOI2003]严格n元树 DP+高精度
- 怎么用php post 数据到服务器端,封装的方法,只需要输入url 和 post 数据即可
- group by和 选择前几个的select语句
- C++黑魔法系列2: lvalue, move constructor, copy and swap
- 业余时间决定了你的人生
- 线段树的应用方法总结
- Kettle7.1 创建数据库资源库方法整理
- FZU-2193 So Hard
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{