题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575
矩阵快速幂,感觉和整数快速幂是一样的,二分真是好东西。
#include<cstdio>
#include<cstring>
using namespace std;
const int num=15;
const int mod=9973;
struct matrix
{
int m[num][num];
};
matrix p,c;
int n;
void init(matrix &a)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a.m[i][j]=(i==j);
}
matrix mul(matrix &a,matrix &b)
{
matrix c;
int i,j,k;
memset(c.m,0,sizeof(c.m));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
{
c.m[i][j]+=(a.m[i][k]*b.m[k][j]);
c.m[i][j]%=mod;
}
return c;
}
int main()
{
int t,i,j,k,ans;
//freopen("in.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
init(p);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&c.m[i][j]);
while(k>0)
{
if(k&1)
p=mul(p,c);
c=mul(c,c);
k=(k>>1);
}
ans=0;
for(i=0;i<n;i++)
ans+=p.m[i][i];
printf("%d\n",ans%mod);
}
return 0;
}