轮状病毒什么的,看着就是dp,看着就是找规律F(n)=3*F(n-1)-F(n-2)+2然后就很好做了? 等等。 n最大100唉? 还要再加个高精度。#include<map> #include<queue> #include<cmath> #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #define qread(x) x=read() #define mes(x,y) memset(x,y,sizeof(x)) #define mpy(x,y) memcpy(x,y,sizeof(x)) #define Maxn 1000 #define INF 2147483647 inline int read(){ char ch=getchar(); int f=1,x=0; while(!(ch>='0'&&ch<='9')){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();} return x*f; } struct Sint{ int len,c[Maxn+1]; void clear(){ len=0;mes(c,0); } int give_int(int x){ clear(); while(x>0){ len++; c[len]=x%10; x/=10; } } }; void pSint(Sint &x){ for(int i=x.len;i>=1;i--)printf("%d",x.c[i]);printf("\n"); } Sint sub_int(Sint &x,int y){ x.c[1]-=y; for(int i=1;i<=x.len;i++){ while(x.c[i]<0){ x.c[i+1]--; x.c[i]+=10; } } while(x.c[x.len]==0)x.len--; } Sint sub(Sint &x,Sint &y){ x.len=std::max(x.len,y.len); for(int i=1;i<=x.len;i++)x.c[i]-=y.c[i]; for(int i=1;i<=x.len;i++){ while(x.c[i]<0){ x.c[i+1]--; x.c[i]+=10; } } while(x.c[x.len]==0)x.len--; } Sint add(Sint &x,Sint &y){ x.len=std::max(x.len,y.len); for(int i=1;i<=x.len;i++)x.c[i]-=y.c[i]; for(int i=1;i<=x.len;i++){ while(x.c[i]>9){ x.c[i+1]+=x.c[i]/10; x.c[i]%=10; } } while(x.c[x.len+1]>0){ x.len++; x.c[x.len+1]+=x.c[x.len]/10; x.c[x.len]%=10; } } Sint add_int(Sint &x,int y){ x.c[1]+=y; for(int i=1;i<=x.len;i++){ while(x.c[i]>9){ x.c[i+1]+=x.c[i]/10; x.c[i]%=10; } } while(x.c[x.len+1]>0){ x.len++; x.c[x.len+1]+=x.c[x.len]/10; x.c[x.len]%=10; } } Sint multi_int(Sint &x,int y){ for(int i=1;i<=x.len;i++)x.c[i]*=y; for(int i=1;i<=x.len;i++){ if(x.c[i]>9){ x.c[i+1]+=x.c[i]/10; x.c[i]%=10; } } while(x.c[x.len+1]>0){ x.len++; x.c[x.len+1]+=x.c[x.len]/10; x.c[x.len]%=10; } } //f[n]=3*f[n-1]-f[n-2]+2 int main(){ int n; qread(n); if(n==1)printf("1\n"); else if(n==2)printf("2\n"); else{ Sint x,y,z; x.give_int(1); y.give_int(5); for(int i=3;i<=n;i++){ z=y; multi_int(z,3); sub(z,x); add_int(z,2); x=y;y=z; } pSint(z); } }
查看原文:http://hz2016.tk/blog/?p=58
[FJOI2007]轮状病毒
最新推荐文章于 2020-05-17 08:13:52 发布