[BZOJ 1002] [FJOI 2007] 轮状病毒
2015-05-26 22:45
357 查看
1002: [FJOI2007]轮状病毒
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3045 Solved: 1687
[Submit][Status][Discuss]
Description
给定n(N<=100),编程计算有多少个不同的n轮状病毒。#include<bits/stdc++.h> using namespace std; struct bn { int len; int k[110]; }f[101]; // f(i)=3f(i-1)-f(i-2)+2 bn mul(bn a) { bn ans; memset(ans.k,0,sizeof(ans.k)); ans.len=a.len; for (int i=1;i<=a.len;++i) { ans.k[i]+=a.k[i]*3; if (ans.k[i]>=10) { ans.k[i+1]+=ans.k[i]/10; ans.k[i]%=10; } } if (ans.k[ans.len+1]>0) ans.len++; return ans; } bn addtwo(bn a) { bn ans; ans.len=a.len; memset(ans.k,0,sizeof(ans.k)); for (int i=1;i<=ans.len;++i) ans.k[i]=a.k[i]; ans.k[1]+=2; int ka=1; while(ans.k[ka]>=10) { ans.k[ka+1]+=ans.k[ka]/10; ans.k[ka++]%=10; } if (ka>ans.len) ans.len=ka; return ans; } bn xminus(bn a, bn b) { bn ans; ans.len=a.len; memset(ans.k,0,sizeof(ans.k)); for (int i=1;i<=a.len;++i) { ans.k[i]+=a.k[i]-b.k[i]; if (ans.k[i] < 0) { ans.k[i]+=10; ans.k[i+1]--; } } while(ans.k[ans.len]==0) ans.len--; return ans; } int main() { int n; scanf("%d",&n); //for (int i=1;i<=n;++i) memset(f[i].k,0,sizeof(f[i].k)); f[1].k[1]=1;f[2].k[1]=5;f[1].len=1;f[2].len=1; //bn ans=xminus(mul(f[2]),f[1]); //for (int i=ans.len;i>=1;--i) printf("%d",ans.k[i]); for (int i=3;i<=n;++i) f[i]=addtwo(xminus(mul(f[i-1]),f[i-2])); //f =mul(f[2]); for (int i=f .len;i>=1;--i) printf("%d",f .k[i]); return 0; }
View Code
相关文章推荐
- 【BZOJ 1002】 [FJOI2007]轮状病毒 【矩阵树定理】【留坑】
- 【bzoj 1002】[FJOI2007]轮状病毒
- [bzoj1002][FJOI2007]轮状病毒_递推_高精度
- bzoj1002【fjoi2007】轮状病毒
- BZOJ 1002 [FJOI2007] 轮状病毒
- 【bzoj1002】【FJOI2007】【轮状病毒】【找规律】
- 【BZOJ 1002】: [FJOI2007]轮状病毒
- [bzoj] 1002: [FJOI2007]轮状病毒
- [bzoj1002][FJOI2007]轮状病毒【高精度】【矩阵树定理】
- Bzoj1002 [FJOI2007]轮状病毒
- BZOJ 1002: [FJOI2007]轮状病毒【生成树的计数与基尔霍夫矩阵简单讲解+高精度】
- BZOJ 1002: [FJOI2007]轮状病毒
- [高精度][BZOJ1002][FJOI2007]轮状病毒
- bzoj1002[FJOI2007]轮状病毒
- 【bzoj 1002】 轮状病毒 [FJOI2007]
- BZOJ1002 [FJOI2007]轮状病毒
- BZOJ 1002 FJOI 2007 轮状病毒 暴力+找规律+高精度
- bzoj 1002: [FJOI2007]轮状病毒
- BZOJ1002 [FJOI2007]轮状病毒
- 【FJOI2007】bzoj1002 轮状病毒