codevs 3332 数列 (矩阵乘法)
Posted 一入OI深似海
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codevs 3332 数列 (矩阵乘法)相关的知识,希望对你有一定的参考价值。
/* 裸地矩阵乘法 矩阵很好想的 1 1 0 0 0 1 1 0 0 */ #include<iostream> #include<cstring> #include<cstdio> #define mod 1000000007 #define ll long long using namespace std; int T,n; ll f[4][4],a[4][4]; void mul(ll a[4][4],ll b[4][4]) { ll c[4][4]; memset(c,0,sizeof(c)); for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) for(int k=1;k<=3;k++) c[i][j]=(c[i][j]+a[i][k]*b[k][j])%mod; for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) a[i][j]=c[i][j]; } int main() { scanf("%d",&T); while(T--) { memset(f,0,sizeof(f)); memset(a,0,sizeof(a)); a[1][1]=1;a[1][2]=1;a[2][3]=1;a[3][1]=1;f[1][1]=1;f[1][2]=1; scanf("%d",&n); if(n<=3) { printf("1\n"); continue; } n-=2; while(n) { if(n&1)mul(f,a); mul(a,a); n>>=1; } printf("%ld\n",f[1][1]); } return 0; }
以上是关于codevs 3332 数列 (矩阵乘法)的主要内容,如果未能解决你的问题,请参考以下文章