标签:des style http color io os java ar strong
构造矩阵+快速幂
1 1 1 2 2 0 0 3 7 23 47 16
234 2799 72937Hint
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long int LL; const LL MOD=10000007LL; int n,m; LL a[20]; struct Matrix { int x,y; LL matrix[12][12]; Matrix() { x=y=0; memset(matrix,0,sizeof(matrix)); } }; void init(Matrix& m) { m.x=m.y=n+2; for(int i=0;i<m.x-2;i++) for(int j=i;j<m.y-1;j++) m.matrix[i][j]=1; m.matrix[m.x-2][m.y-2]=10; m.matrix[m.x-1][m.y-1]=m.matrix[m.x-2][m.y-1]=1; } Matrix CHENGFA(Matrix& a,Matrix& b) { int n=a.x; Matrix ret; ret.x=ret.y=n; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { LL temp=0; for(int k=0;k<n;k++) { temp=(temp+(a.matrix[i][k]*b.matrix[k][j])%MOD)%MOD; } ret.matrix[i][j]=temp%MOD; } } return ret; } Matrix MatrixQuickPow(Matrix m,int k) { Matrix e; int n=m.x; e.x=e.y=n; for(int i=0;i<n;i++) e.matrix[i][i]=1; while(k) { if(k%2) e=CHENGFA(e,m); m=CHENGFA(m,m); k/=2; } return e; } int main() { while(scanf("%d%d",&n,&m)!=EOF) { for(int i=n-1;i>=0;i--) scanf("%lld",a+i); a[n]=233; a[n+1]=3; Matrix M,ED; init(M); ED=MatrixQuickPow(M,m-1); LL ans=0; for(int i=0;i<n+1;i++) { LL temp=0; for(int j=0;j<n+2;j++) { temp=(temp+(ED.matrix[i][j]*a[j])%MOD)%MOD; } ans=(ans+temp)%MOD; } printf("%I64d\n",ans); } return 0; }
标签:des style http color io os java ar strong
原文地址:http://blog.csdn.net/ck_boss/article/details/39295267