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 }

 

posted @ 2018-02-11 17:38  Changer-qyz  阅读(198)  评论(0编辑  收藏  举报