HDU1575Tr A

矩阵快速幂,别忘了mod就好

//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int mod=9973;
int n,m;
struct mtix
{
	int a[15][15];
	mtix(){memset(a,0,sizeof(a));}	
}f;
mtix mul(mtix a,mtix b)
{
	mtix c;
	for (int i=1;i<=n;i++)
	for (int j=1;j<=n;j++)
	for (int k=1;k<=n;k++)
	c.a[i][j]+=(a.a[i][k]*b.a[k][j])%mod,c.a[i][j]%=mod;
	return c;
}
void mpow(int y)
{
	mtix ans;int sum=0;
	for (int i=1;i<=n;i++)
		ans.a[i][i]=1;
	for (;y;f=mul(f,f),y>>=1)
		if (y&1) ans=mul(ans,f);
	for (int i=1;i<=n;i++)
		sum+=ans.a[i][i];
	cout<<sum%mod<<endl;
	return ;
}
int main() 
{
	int t;cin>>t;
	while (t--)
	{
		scanf("%d%d",&n,&m);
		for (int i=1;i<=n;i++)
		for (int k=1;k<=n;k++)
		scanf("%d",&f.a[i][k]);
		mpow(m);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/acerandaker/article/details/81131524
tr