2 条题解
-
1
#include<bits/stdc++.h> using namespace std; const int N=110; struct node{ int len,a[N]; node(){ len=1; memset(a,0,sizeof(a)); } }; node operator +(node n1,node n2){ node ans; ans.len=n1.len; for(int i=1;i<=ans.len;i++){ ans.a[i]=n1.a[i]+n2.a[i]; } for(int i=1;i<=ans.len;i++){ ans.a[i+1]+=ans.a[i]/10; ans.a[i]%=10; } int i=ans.len; while(ans.a[i+1]>0){ i++; ans.a[i+1]+=ans.a[i]/10; ans.a[i]%=10; } while(!ans.a[i]&&i>1)i--; ans.len=i; return ans; } node operator -(node n1,int x){ node ans=n1; ans.a[1]=ans.a[1]-x; for(int i=1;i<=ans.len;i++){ if(ans.a[i]<0){ ans.a[i+1]--; ans.a[i]+=10; } } int i=ans.len; while(!ans.a[i]&&i>1)i--; return ans; } node operator *(node n1,node n2){ node ans; ans.len=n1.len+n2.len-1; for(int i=1;i<=n1.len;i++) for(int j=1;j<=n2.len;j++) ans.a[i+j-1]+=n1.a[i]*n2.a[j]; for(int i=1;i<=ans.len;i++){ ans.a[i+1]+=ans.a[i]/10; ans.a[i]%=10; } int i=ans.len; while(ans.a[i+1]>0){ i++; ans.a[i+1]+=ans.a[i]/10; ans.a[i]%=10; } while(!ans.a[i]&&i>1)i--; ans.len=i; return ans; } node f[N],g[N]; int main(){ int n;scanf("%d",&n); g[1].a[1]=1,g[2].a[1]=3; f[1].a[1]=1,f[2].a[1]=5; for(int i=3;i<=n;i++){ g[i]=g[i-1]+g[i-2]; if(i%2==1){ f[i]=g[i]*g[i]; } if(i%2==0){ f[i]=g[i]*g[i]; f[i]=f[i]-4; } } for(int i=f[n].len;i>=1;i--){ printf("%d",f[n].a[i]); } return 0; }
-
0
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int tt=10000; int n; struct xcw { int len,a[1005]; xcw(){memset(a,0,sizeof(a));len=0;} xcw(int x) { memset(a,0,sizeof(a));len=0; do{a[++len]=x%tt;x/=tt;}while(x); } xcw operator *(const int b)const { xcw c; c.len=len; for(int i=1;i<=len;i++){ c.a[i]+=a[i]*b; c.a[i+1]+=c.a[i]/tt; c.a[i]%=tt; } if(c.a[c.len+1]) c.len++; return c; } xcw operator -(const xcw b)const { xcw c; c.len=max(len,b.len); for(int i=1;i<=c.len;i++) { c.a[i]+=a[i]-b.a[i]+tt; c.a[i+1]+=c.a[i]/tt-1; c.a[i]%=tt; } while(!c.a[c.len]) c.len--; return c; } xcw operator +(const int b)const { xcw c; c.len=len;c.a[1]+=b; for(int i=1;i<=c.len;i++) { c.a[i]+=a[i]; c.a[i+1]+=c.a[i]/tt; c.a[i]%=tt; } if(c.a[c.len+1]) c.len++; return c; } void write() { printf("%d",a[len]); for(int i=len-1;i;i--) printf("%04d",a[i]); printf("\n"); } }f[105]; int main() { scanf("%d",&n); f[1]=1;f[2]=5; for(int i=3;i<=n;i++) f[i]=f[i-1]*3-f[i-2]+2; f[n].write(); return 0; }
- 1
信息
- ID
- 1002
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 142
- 已通过
- 59
- 上传者