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 }

 

posted @ 2021-03-02 16:16  acmloser  阅读(34)  评论(0编辑  收藏  举报