[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 }