Tr A HDU - 1575
考察:矩阵快速幂
思路:
入门题,ans = fk = f*fk-1.注意的是不能只保留主对角线的元素,因为主对角线的元素会随同行同列的元素变化
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 using namespace std; 5 typedef long long LL; 6 const int Mod = 9973,N = 15; 7 int ans,a[N][N],n,k; 8 void mul(int f[][N],int a[][N]) 9 { 10 int res[N][N]; 11 memset(res,0,sizeof res); 12 for(int i=1;i<=n;i++) 13 for(int j=1;j<=n;j++) 14 for(int k=1;k<=n;k++) 15 res[i][j] = (res[i][j]+a[i][k]*f[k][j])%Mod; 16 memcpy(f,res,sizeof res); 17 } 18 int main() 19 { 20 int T; 21 scanf("%d",&T); 22 while(T--) 23 { 24 scanf("%d%d",&n,&k); 25 int f[N][N]; 26 ans = 0; 27 for(int i=1;i<=n;i++) 28 for(int j=1;j<=n;j++) scanf("%d",&f[i][j]); 29 memcpy(a,f,sizeof f); 30 k--; 31 while(k) 32 { 33 if(k&1) mul(f,a); 34 mul(a,a); 35 k>>=1; 36 } 37 for(int i=1;i<=n;i++) ans = (ans+f[i][i])%Mod; 38 printf("%d\n",ans); 39 } 40 return 0; 41 }