思路:
裸的矩阵快速幂,读完题,感觉有点对不起四级算法题这一类。
#include<bits/stdc++.h> using namespace std; typedef long long LL; const LL mod=1e9+7; int n; struct asd{ LL a[102][102]; }; asd mul(asd x,asd y) { asd ans; memset(ans.a,0,sizeof(ans.a)); for(int i=0;i<n;i++) for(int j=0;j<n;j++) for(int k=0;k<n;k++) ans.a[i][j]=(ans.a[i][j]+x.a[i][k]*y.a[k][j]%mod)%mod; return ans; } asd quickmul(int g,asd x) { asd ans; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(i==j) ans.a[i][j]=1; else ans.a[i][j]=0; while(g) { if(g&1) ans=mul(ans,x); x=mul(x,x); g>>=1; } return ans; } int main() { int m; scanf("%d%d",&n,&m); asd x; for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%lld",&x.a[i][j]); x=quickmul(m,x); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(j) printf(" "); printf("%lld",x.a[i][j]); } puts(""); } return 0; }