hdu1575矩阵的快速幂
#include<iostream> using namespace std; const int MAXN=12; const int MOD=9973; struct matrix { int data[MAXN][MAXN]; int n; void init() { int i,j; for(i=0;i<=MAXN-1;i++) { for(j=0;j<=MAXN-1;j++) { data[i][j]=0; } } n=0; } }; matrix multy(matrix m1,matrix m2) { matrix r; r.init(); int n=m1.n; r.n=n; int i,j,k; for(i=0;i<=n-1;i++) { for(j=0;j<=n-1;j++) { for(k=0;k<=n-1;k++) { r.data[i][j]=(r.data[i][j]+m1.data[i][k]*m2.data[k][j])%MOD; } } } return r; } matrix fast_mi(matrix a,int m) { matrix r; r.init(); r.n=a.n; int i=0; int n=a.n; for(i=0;i<=n-1;i++) { r.data[i][i]=1; } while(m) { if(m&1) { r=multy(r,a); } a=multy(a,a); m=m>>1; } return r; } int tr(matrix m) { int sum=0; int i; for(i=0;i<=m.n-1;i++) { sum=(sum+m.data[i][i])%MOD; } return sum%MOD; } int main() { int T; cin>>T; while(T--) { int n,m; cin>>n>>m; int i,j; matrix ma; ma.init(); for(i=0;i<=n-1;i++) { for(j=0;j<=n-1;j++) { cin>>ma.data[i][j]; } } ma.n=n; cout<<tr(fast_mi(ma,m))<<endl; } return 0; }
本博客(http://www.cnblogs.com/cj695/)未标明转载的内容均为本站原创,非商业用途转载时请署名(77695)并注明来源(http://www.cnblogs.com/cj695/)。商业用途请联系作者(77695) QQ:646710030。作者(77695)保留本博客所有内容的一切权利。
独立博客:http://nfeng.cc/
独立博客:http://nfeng.cc/