[51nod1113]矩阵快速幂

解题关键:模板题,方便以后熟悉

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 struct mat{
 5     ll m[200][200];
 6 };
 7 ll mod=1e9+7;
 8 int n,t;
 9 mat mul(mat &A,mat &B){
10     mat C={0};
11     for(int i=0;i<n;i++){
12         for(int j=0;j<n;j++){
13             for(int k=0;k<n;k++){
14                 C.m[i][j]=(C.m[i][j]+A.m[i][k]*B.m[k][j]+mod)%mod;
15             }
16         }
17     }
18     return C;
19 }
20 mat pow(mat A){
21     mat B={0};
22     for(int i=0;i<n;i++){
23         B.m[i][i]=1;
24     } 
25     while(t){
26         if(t&1) B=mul(B,A);
27         A=mul(A,A);
28         t>>=1;
29     }
30     return B;
31 }
32 int main(){
33     cin>>n>>t;
34     mat A={0};
35     for(int i=0;i<n;i++){
36         for(int j=0;j<n;j++){
37             cin>>A.m[i][j];
38         }
39     } 
40     A=pow(A);
41     for(int i=0;i<n;i++){
42         for(int j=0;j<n;j++){
43             cout<<A.m[i][j]<<' ';
44         }
45         cout<<endl;
46     } 
47 }

 

posted @ 2017-05-27 12:47  Elpsywk  阅读(169)  评论(0编辑  收藏  举报