BZOJ1002: [FJOI2007]轮状病毒
2018-01-12 21:41
274 查看
题解:
找规律题:f[i]=(f[i-1]*3-f[i-2]+2),套一个高精度就好了。代码如下:
#include<cstdio> #include<string> using namespace std; const int maxn=105,maxl=1005; int n,f[maxn][maxl],len[maxn]; void add(int x){ int a=x-1,b=x-2; len[x]=len[a]; for (int i=1;i<=len[x];i++) { f[x][i]+=f[a][i]*3; f[x][i+1]+=(f[x][i])/10; f[x][i]=f[x][i]%10; } if (f[x][len[x]+1]>0) len[x]++; f[x][1]=f[x][1]+2; int p=1; while (f[x][p]>=10) {f[x][p+1]+=f[x][p]/10; f[x][p]=f[x][p]%10; p++;} for (int i=1;i<len[x];i++) { f[x][i]=f[x][i]+10-f[b][i]; f[x][i+1]=f[x][i+1]-1+(f[x][i])/10; f[x][i]=f[x][i]%10; } f[x][len[x]]=f[x][len[x]]-f[b][len[x]]; while (f[x][len[x]]<=0) len[x]--; } int main(){ scanf("%d",&n); len[2]=len[1]=f[1][1]=1; f[2][1]=5; if (n<=2) {printf("1\n"); return 0;} for (int i=3;i<=n;i++) add(i); for (int i=len ;i>=1;i--) printf("%d",f [i]); printf("\n"); return 0; }
相关文章推荐
- BZOJ 1002: [FJOI2007]轮状病毒 递推/基尔霍夫矩阵树定理
- BZOJ 1002:[FJOI2007] 轮状病毒 (基尔霍夫矩阵生成树定理)
- BZOJ 1002: [FJOI2007]轮状病毒【数学题】
- BZOJ 题目1002 [FJOI2007]轮状病毒(高精度+基尔霍夫矩阵)
- 【bzoj 1002】[FJOI2007]轮状病毒
- [BZOJ 1002] [FJOI 2007] 轮状病毒
- BZOJ 1002 [FJOI2007] 轮状病毒
- bzoj1002[FJOI2007]轮状病毒 递推+高精度
- BZOJ 1002 FJOI 2007 轮状病毒 暴力+找规律+高精度
- bzoj1002[FJOI2007]轮状病毒
- Bzoj1002 [FJOI2007]轮状病毒
- [BZOJ1002](FJOI 2007) 轮状病毒
- bzoj1002[FJOI2007]轮状病毒
- BZOJ 1002: [FJOI2007]轮状病毒【生成树的计数与基尔霍夫矩阵简单讲解+高精度】
- [bzoj] 1002: [FJOI2007]轮状病毒
- BZOJ 1002 [FJOI2007]轮状病毒
- BZOJ1002 [FJOI2007]轮状病毒
- 【FJOI2007】bzoj1002 轮状病毒
- bzoj 1002 [FJOI2007]轮状病毒 找规律/基尔霍夫矩阵
- BZOJ 1002 FJOI 2007 轮状病毒 暴力+找规律+高精度