1089: [SCOI2003]严格n元树 DP+高精度
2016-03-16 07:44
309 查看
可以发现对于一棵深度为nn的树,这棵树除深度为nn的那棵子树外其它子树的高度可以是0..n0..n,所以如果用fif_i表示深度为ii的树的个数可能不太好转移,我们考虑前缀和的形式,令sis_i表示深度≤i\leq i的树的个数。
那么一棵深度为nn的树其实就是根节点加nn个深度<=n−1<=n-1的树,所以有si=sni−1+1s_i=s_{i-1}^n+1,然后我们就可以高精度搞一搞了。
重载运算符大法好
那么一棵深度为nn的树其实就是根节点加nn个深度<=n−1<=n-1的树,所以有si=sni−1+1s_i=s_{i-1}^n+1,然后我们就可以高精度搞一搞了。
重载运算符大法好
[code]#include<iostream> #include<cstdio> #define base 10000 using namespace std; int n,d; struct node { int num[305]; int cnt; void operator=(int y) { num[1]=y; cnt=1; } int& operator[](int x) { return num[x]; } }s[20]; inline int read() { int a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f; } node operator*(node a,node b) { node ans=s[19]; for (int i=1;i<=a.cnt;i++) for (int j=1;j<=b.cnt;j++) { ans[i+j-1]+=a[i]*b[j]; ans[i+j]+=ans[i+j-1]/base; ans[i+j-1]%=base; } ans.cnt=a.cnt+b.cnt; if (!ans[ans.cnt]) ans.cnt--; return ans; } node operator^(node a,int b) { node ans=s[19]; ans=1; for (;b;b>>=1,a=a*a) if (b&1) ans=ans*a; return ans; } void operator++(node &a) { int now=1; a[1]++; while (a[now]==10000) a[now]=0,a[++now]++; } node operator-(node a,node b) { node ans=s[19]; for (int i=1;i<=a.cnt;i++) { ans[i]+=a[i]-b[i]; if (ans[i]<0) ans[i]+=base,ans[i+1]--; if (ans[i]) ans.cnt=i; } return ans; } void print(node ans) { printf("%d",ans[ans.cnt]); for (int i=ans.cnt-1;i;i--) { if (ans[i]<1000) printf("0"); if (ans[i]<100) printf("0"); if (ans[i]<10) printf("0"); printf("%d",ans[i]); } } int main() { n=read(); d=read(); if (!d) { puts("1"); return 0; } s[0]=1; for (int i=1;i<=d;i++) s[i]=s[i-1]^n,++s[i]; node ans=s[d]-s[d-1]; print(ans); return 0; }
相关文章推荐
- BZOJ1072: [SCOI2007]排列perm
- ubuntu 没有权限打开串口
- Mysql与MongoDB对比测试
- MongoDB之php操作
- “网红时代”大趋势下另类做淘宝的高效套路
- MongoDB:用户认证
- FZU 2099 魔法阵
- MongoDB2.0安装配置
- FZU 2098 刻苦的小芳
- FZU 2095 水面高度
- JDK配置环境变量的原因(windows)
- 17. Letter Combinations of a Phone Number | Java最短代码实现
- old linkedin profile
- WCF入门教程——一个简单Demo(六)
- ES5 对象的扩展(Object.preventExtensions)、密封(Object.seal)和冻结(Object.freeze)
- IE10/11克隆textarea时 bug
- struts2中的addActionError 、addFieldError、addActionMessage的方法
- Linux并发(进程的生老病死)
- 有序链表合并
- [BZOJ 3585]mex