题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575
解题思路:矩阵快速幂
1 #include<iostream> 2 using namespace std; 3 4 int n; //nxn矩阵 5 6 struct Matrix{ 7 int a[10][10]; 8 }origin,res; 9 10 Matrix multiply(Matrix x,Matrix y){ 11 Matrix temp; 12 for(int i=0;i<n;i++){ 13 for(int j=0;j<n;j++){ 14 temp.a[i][j]=0; 15 for(int k=0;k<n;k++) temp.a[i][j]+=x.a[i][k]*y.a[k][j]; 16 temp.a[i][j]%=9973; 17 } 18 } 19 return temp; 20 } 21 22 void calc(int k){ 23 while(k){ 24 if(k&1) res=multiply(res,origin); 25 k>>=1; 26 origin=multiply(origin,origin); 27 } 28 } 29 30 int main(){ 31 int T,k,i,j; 32 cin>>T; 33 while(T--){ 34 cin>>n>>k; 35 36 //初始化origin和res(单位矩阵) 37 for(i=0;i<n;i++){ 38 for(j=0;j<n;j++){ 39 cin>>origin.a[i][j]; 40 res.a[i][j]=0; 41 } 42 res.a[i][i]=1; 43 } 44 45 calc(k); 46 int ans=0; 47 for(i=0;i<n;i++) ans+=res.a[i][i]; 48 ans%=9973; 49 cout<<ans<<endl; 50 } 51 return 0; 52 }