bzoj1089: [SCOI2003]严格n元树
这题方程就是f(i)=f(i-1)^n+1
高精度谢谢。
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; struct node { int a[1100],len; node(){} void init() { memset(a,0,sizeof(a));a[1]=1; len=1; } void jia(int x) { a[1]+=x; for(int i=1;i<=len;i++) { a[i+1]+=a[i]/10; a[i]%=10; } int i=len; while(a[i+1]>0) { i++; a[i+1]+=a[i]/10; a[i]%=10; } } node cheng(node n1,node n2) { node n3;n3.len=n1.len+n2.len-1; memset(n3.a,0,sizeof(n3.a)); for(int i=1;i<=n1.len;i++) for(int j=1;j<=n2.len;j++) n3.a[i+j-1]+=n1.a[i]*n2.a[j]; for(int i=1;i<=n3.len;i++) { n3.a[i+1]+=n3.a[i]/10; n3.a[i]%=10; } int i=n3.len; while(n3.a[i+1]>0) { i++; n3.a[i+1]+=n3.a[i]/10; n3.a[i]%=10; } n3.len=i; return n3; } void jian(node n2) { for(int i=1;i<=len;i++)a[i]-=n2.a[i]; for(int i=1;i<=len;i++) { if(a[i]<0) { a[i]+=10; a[i+1]--; } } while(a[len]==0)len--; } }f[2]; int main() { int n,d; scanf("%d%d",&n,&d); int now=0;f[now].init(); for(int i=1;i<=d;i++) { now=1-now; f[now].init(); for(int j=1;j<=n;j++) f[now]=f[now].cheng(f[1-now],f[now]); f[now].jia(1); } f[now].jian(f[1-now]); for(int i=f[now].len;i>=1;i--)printf("%d",f[now].a[i]); printf("\n"); return 0; }
pain and happy in the cruel world.