[BZOJ1002]轮状病毒
来源:互联网 发布:怎么在ubuntu上装jdk 编辑:程序博客网 时间:2024/05/01 18:12
基尔霍夫矩阵 并不会推
推荐:
点击打开链接
点击打开链接
总而言之 式子就是f[i]=f[i-1]*3-f[i-2]+2
板子贴这 以后还能当高精度板子用
#include<cstdio>#include<cstdlib>#include<iostream>#include<algorithm>#include<cstring>#include<queue>#include<stack>#include<set>#include<map>#include<cmath>#include<iomanip>#define debug(x) cerr<<#x<<"="<<x<<endlusing namespace std;typedef pair<int,int> pii;typedef long long ll;const int INF = 0x7f7f7f7f;const ll INFF = 0x7ffffffff;inline int init(){int now=0,ju=1;char c;bool flag=false;while(1){c=getchar();if(c=='-')ju=-1;else if(c>='0'&&c<='9'){now=now*10+c-'0';flag=true;}else if(flag)return now*ju;}}inline long long llinit(){long long now=0,ju=1;char c;bool flag=false;while(1){c=getchar();if(c=='-')ju=-1;else if(c>='0'&&c<='9'){now=now*10+c-'0';flag=true;}else if(flag)return now*ju;}}struct bignumber{int num[1001];int length;};bignumber operator + (bignumber a,int b){bignumber ans=a;ans.num[1]+=b;for(int i=1;i<ans.length;i++){if(ans.num[i]>=10){ans.num[i+1]+=ans.num[i]/10;ans.num[i]%=10;}else break;}if(ans.num[ans.length]>=10){ans.length++;ans.num[ans.length]+=ans.num[ans.length-1]/10;ans.num[ans.length-1]%=10;}return ans;}bignumber operator + (bignumber a,bignumber b){bignumber ans;int minlen=min(a.length,b.length);int maxlen=max(a.length,b.length);for(int i=1;i<=maxlen;i++){ans.num[i]=0;}for(int i=1;i<=minlen;i++){ans.num[i]+=a.num[i]+b.num[i];//有可能一开始已经被进位就错了if(ans.num[i]>=10){ans.num[i+1]+=(ans.num[i]/10);ans.num[i]%=10;}}for(int i=minlen+1;i<=maxlen;i++){ans.num[i]+=a.num[i]+b.num[i];if(ans.num[i]>=10){ans.num[i+1]+=(ans.num[i]/10);ans.num[i]%=10;}}if(ans.num[maxlen+1]!=0){ans.length=maxlen+1;}else ans.length=maxlen;return ans;}bignumber l;bignumber operator * (bignumber x,int b){bignumber ans=l;ans.length=x.length;for(int i=1;i<=x.length;i++){ans.num[i]+=x.num[i]*b;ans.num[i+1]+=ans.num[i]/10;ans.num[i]%=10;}if(ans.num[x.length+1]!=0){ans.length++;}return ans;}bool cmp(bignumber a,bignumber b){if(a.length>b.length)return true;else if(a.length<b.length)return false;else {for(int i=a.length;i>=1;i--){if(a.num[i]>b.num[i])return true;else if(a.num[i]<b.num[i])return false;}}}bignumber operator - (bignumber a,bignumber b){bignumber ans,tmp;if(!cmp(a,b)){tmp=a;a=b;b=tmp;}for(int i=1;i<=b.length;i++){a.num[i]-=b.num[i];while(a.num[i]<0){a.num[i+1]--;a.num[i]+=10;}}return a;}int main(){int n;n=init();if(n==1){printf("1");return 0;}else if(n==2){printf("5");return 0;}bignumber f1,f2,f;f1.num[1]=5;f2.num[1]=1;f1.length=1;f2.length=1;bignumber temp;for(int i=3;i<=n;i++){temp=f1;f1=f1*3;f=f1-f2;f=f+2;f2=temp;f1=f;}for(int i=f.length;i>=1;i--){printf("%d",f.num[i]);}return 0;}
补充:
这个题由于只会出现*10以内的情况,因此不会错
假如超过10怎么办?
bignumber operator * (bignumber x,int b) { bignumber sum=l; sum.length=x.length; for(int i=1;i<=x.length;i++) { sum.num[i]+=x.num[i]*b; sum.num[i+1]+=sum.num[i]/10; sum.num[i]%=10; } while(sum.num[sum.length+1]!=0) { sum.num[sum.length+2]+=sum.num[sum.length+1]/10; sum.num[sum.length+1]%=10; sum.length++; } return sum; }
//或者你也可以去写高精*高精……
0 0
- BZOJ1002轮状病毒
- [BZOJ1002]轮状病毒
- BZOJ1002轮状病毒
- [Bzoj1002][FJOI2007]轮状病毒
- bzoj1002[FJOI2007]轮状病毒
- 【bzoj1002】【FJOI2007】【轮状病毒】
- [高精度][BZOJ1002][FJOI2007]轮状病毒
- 【FJOI2007】【BZOJ1002】轮状病毒
- bzoj1002【fjoi2007】轮状病毒
- [BZOJ1002] [FJOI2007] 轮状病毒
- BZOJ1002 [FJOI2007]轮状病毒
- BZOJ1002: [FJOI2007]轮状病毒
- bzoj1002: [FJOI2007]轮状病毒
- 【FJOI2007】bzoj1002 轮状病毒
- 【bzoj1002】[FJOI2007]轮状病毒
- bzoj1002 [FJOI2007]轮状病毒
- bzoj1002: [FJOI2007]轮状病毒
- [bzoj1002] [FJOI2007]轮状病毒
- 白盒测试练习及答案
- 编写一个程序,数一下1—100的所有整数中出现多少次数字9
- 能展示不同页面的加载LoadingLayout布局
- 一个嵌入式工程师的面试之路
- windows7设置MySQL数据库编码为UTF-8
- [BZOJ1002]轮状病毒
- hduoj1220
- IIC
- 欢迎使用CSDN-markdown编辑器
- 再看自考
- 解释器模式
- Windows中为Latex添加.sty文件和.cls文件
- Android弹幕功能实现,模仿斗鱼直播的弹幕效果
- HDU 5514 Frogs