HDU 1575 点击打开链接
很裸的一道矩阵快速幂题,直接裸模板。
#include<stdio.h>
#include<iostream>
using namespace std;
const int mod=9973;
int n,k;
struct Ju
{
int x[15][15];
};
Ju operator *(const Ju& a,const Ju& b)
{
Ju c;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
c.x[i][j]=0;
for(int k=0;k<n;k++)
{
c.x[i][j]+=(a.x[i][k]*b.x[k][j])%mod;
c.x[i][j]%=mod;
}
}
}
return c;
}
Ju pow(Ju a)
{
Ju one;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)one.x[i][j]=1;
else
one.x[i][j]=0;
}
}
while(k)
{
if(k&1)
{
one=one*a;
}
a=a*a;
k/=2;
}
return one;
}
int main()
{
int t;
while(~scanf("%d",&t))
{
while(t--)
{
scanf("%d%d",&n,&k);
Ju a;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
scanf("%d",&a.x[i][j]);
}
}
Ju ans=pow(a);
int sum=0;
for(int i=0;i<n;i++)
{
sum+=ans.x[i][i];
sum%=mod;
}
printf("%d\n",sum);
}
}
}