【Codevs3332】数列
来源:互联网 发布:matlab输入未知数矩阵 编辑:程序博客网 时间:2024/05/19 03:42
题目大意
a[1]=a[2]=a[3]=1
a[x]=a[x-3]+a[x-1] (x>3)
求a数列的第n项对1000000007(10^9+7)取余的值。
#include <cstdio>#include <algorithm>#include <cstring>#define Rep(i,s,t) for(int i=s;i<=t;i++)using namespace std;typedef long long LL;const LL p = 1000000007;LL n;int T;namespace matrix_mul{ struct matrix{ LL x[5][5]; }Ans,tmp,mimi; matrix mul(matrix a,LL a1,matrix b,LL b1){ matrix tmp; memset(tmp.x,0,sizeof(tmp.x)); Rep(i,1,a1) Rep(j,1,b1) Rep(k,1,3) tmp.x[i][j] = (tmp.x[i][j]+a.x[i][k]*b.x[k][j])%p; return tmp; } matrix power(matrix a,matrix b,LL n){ matrix ans = a,tmp = b; for(LL i=n-1;i;i>>=1){ if(i & 1) ans = mul(ans,1,tmp,3); tmp = mul(tmp,3,tmp,3); } return ans; }}int main(){ using namespace matrix_mul; scanf("%d",&T); Ans.x[1][1]=Ans.x[1][2]=Ans.x[1][3]=1; tmp.x[1][1]=tmp.x[1][2]=tmp.x[1][3]=tmp.x[2][2]=tmp.x[2][3]=tmp.x[3][1]=tmp.x[3][2]=1; tmp.x[2][1]=0;tmp.x[3][3]=2; while( T-- ){ scanf("%lld",&n); if(n%3==0) mimi = power(Ans,tmp,n/3); else mimi = power(Ans,tmp,n/3+1); printf("%lld\n",n%3==0? mimi.x[1][3]:mimi.x[1][n%3]); } return 0;}
0 0
- Codevs3332 数列
- 【codevs3332】数列
- 【Codevs3332】数列
- 数列
- 数列
- 数列
- 数列!!!
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- 数列
- Spring定时(任务)刷新-quartz
- 动态类型语言与静态类型语言
- 一些常用命令
- 套公式让你不再害怕JavaScript中的作用域
- Linux第三节
- 【Codevs3332】数列
- Python中的推导式使用详解
- 由父类index 找子类index
- JavaScript中的几种继承方式
- RAID扫盲篇之RAID0/RAID1/RAID5/RAID10
- 关于合理使用SpringMVC统一异常处理机制以改善代码风格的一些思考
- 5、eclipse创建简单gradle项目-仓库的指向
- aria2的控制文件*.aria2的技术说明
- 三层权重传递————Ipbrorher