hdoj1575 Tr A(矩阵快速幂)
简单的矩阵快速幂。最后求矩阵的秩。
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 const int Mod=9973; 5 int n,k; 6 struct mat{ 7 int a[15][15]; 8 }; 9 mat res,c; 10 mat mat_mul(mat x,mat y){ 11 mat ans; 12 memset(ans.a,0,sizeof(ans.a)); 13 for (int i=0;i<n;i++) 14 for (int j=0;j<n;j++) 15 for (int k=0;k<n;k++){ 16 ans.a[i][j]+=x.a[i][k]*y.a[k][j]; 17 ans.a[i][j]%=Mod; 18 } 19 return ans; 20 } 21 int mat_pow(int n,int k){ 22 for (int i=0;i<n;i++){ 23 for (int j=0;j<n;j++){ 24 cin >> res.a[i][j]; 25 } 26 } 27 c=res; 28 k--; 29 while (k){ 30 if (k&1) res=mat_mul(res,c); 31 c=mat_mul(c,c); 32 k>>=1; 33 } 34 int ans=0; 35 for (int i=0;i<n;i++){ 36 ans=(ans+res.a[i][i])%Mod; 37 } 38 return ans; 39 } 40 int main(){ 41 int t; 42 cin >> t; 43 while (t--){ 44 cin >> n >> k; 45 cout << mat_pow(n,k) << endl; 46 } 47 return 0; 48 }