hdu1575 TrA

#include<stdio.h>
#include<string.h>
#define MOD 9973
int n,k;

struct Mat{
	int m[15][15];
};
Mat x,y;

void init()
{
	memset(x.m,0,sizeof(x.m));
	memset(y.m,0,sizeof(y.m));
	for(int i = 0;i < n;i++)
		x.m[i][i] = 1;
}

Mat operator *(Mat a,Mat b)
{
	Mat c;
	for(int i = 0;i < n;i++)
		for(int j = 0;j < n;j++)
		{
			c.m[i][j] = 0;
			for(int k = 0;k < n;k++)
				c.m[i][j] += (a.m[i][k] * b.m[k][j])%MOD;
			c.m[i][j] %= MOD;
		}
		return c;
}

Mat Pow(Mat mat,Mat b,int n)
{
	while(n)
	{
		if(n&1)
			b = b*mat;
		mat = mat * mat;
		n >>= 1;
	}
	return b;
}

int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&n,&k);
		init();
		for(int i = 0;i < n;i++)
			for(int j = 0;j < n;j++)
				scanf("%d",&y.m[i][j]);
			Mat ret = Pow(y,x,k);
			int ans = 0;
			for(int i = 0;i < n;i++)
				ans += ret.m[i][i];
			printf("%d\n",ans%MOD);
	}
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章