#include<iostream> #include<stdlib.h> #define N 100000000 using namespace std; void main(){ unsigned n; long int sa[55]; long int sb[55]; memset(sa,0,sizeof(long int)*55); memset(sb,0,sizeof(long int)*55); sa[0]=0; sa[1]=3; sa[2]=6; sa[3]=6; long int a,b,c,d,e; a=b=c=d=e=0; bool t=true; for(int i=4;i<23;++i){ sa[i]=sa[i-1]+sa[i-2]*2; } a=sa[21]%N; b=sa[21]/N; c=sa[22]%N; d=sa[22]/N; sa[21]=a; sb[21]=b; sa[22]=c; sb[22]=d; for(int j=23;j<55;++j){ sa[j]=(sa[j-1]+sa[j-2]*2)%N; e=(sa[j-1]+sa[j-2]*2)/N; sb[j]=sb[j-1]+sb[j-2]*2+e; } while(cin>>n){ int qwq=n; if(qwq<=20) cout<<sa[qwq]<<endl; else{ if(sb[qwq]==0) cout<<sa[qwq]<<endl; else{ cout<<sb[qwq]; long int fff=sa[qwq]; int z=-1; for(;fff<N;++z){ fff*=10; } while(z--){ cout<<"0"; } cout<<sa[qwq]<<endl; } } } }
杭电ACM 第2045题
最新推荐文章于 2021-04-18 23:14:19 发布
该博客主要介绍了杭电ACM竞赛中的第2045题,通过C++实现了一个递推序列计算算法。首先初始化数组并填充序列前几项,然后计算序列的后续项,并处理除法和取模操作以确保结果正确。当输入值n小于等于20时,直接输出对应序列值;否则,根据计算结果输出整数部分和可能存在的小数部分。
1624

被折叠的 条评论
为什么被折叠?



