题意:
求m个n*n的矩阵相乘后的矩阵的对角线之和
简单的矩阵相乘,可当入门题,套套模板就可以了
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
#define mod 9973
int n;
struct matrix
{
int a[15][15];
};
matrix mul(matrix a,matrix b)
{
matrix ret;
memset(ret.a,0,sizeof(ret.a));
for(int i=0;i<n;i++)
{
for(int k=0;k<n;k++)
if(a.a[i][k])
for(int j=0;j<n;j++)
if(b.a[k][j])
ret.a[i][j]= (a.a[i][k]*b.a[k][j]+ret.a[i][j])%mod;
}
return ret;
}
matrix mpower(matrix tem, int m)
{
matrix I;
for(int i=0;i<15;i++)
for(int j=0;j<15;j++)
I.a[i][j] = (i==j);
while(m)
{
if(m&1) I = mul(I,tem);
m>>=1;
tem = mul(tem,tem);
}
return I;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int m;
matrix tem;
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>tem.a[i][j];
}
}
tem = mpower(tem,m);
int sum=0;
for(int i=0;i<n;i++)
{
sum = (sum+tem.a[i][i])%mod;
}
cout<<sum<<endl;
}
return 0;
}