hdu1575矩阵的快速幂
#include<iostream>
using namespace std;
const int MAXN=12;
const int MOD=9973;
struct matrix
{
int data[MAXN][MAXN];
int n;
void init()
{
int i,j;
for(i=0;i<=MAXN-1;i++)
{
for(j=0;j<=MAXN-1;j++)
{
data[i][j]=0;
}
}
n=0;
}
};
matrix multy(matrix m1,matrix m2)
{
matrix r;
r.init();
int n=m1.n;
r.n=n;
int i,j,k;
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
for(k=0;k<=n-1;k++)
{
r.data[i][j]=(r.data[i][j]+m1.data[i][k]*m2.data[k][j])%MOD;
}
}
}
return r;
}
matrix fast_mi(matrix a,int m)
{
matrix r;
r.init();
r.n=a.n;
int i=0;
int n=a.n;
for(i=0;i<=n-1;i++)
{
r.data[i][i]=1;
}
while(m)
{
if(m&1)
{
r=multy(r,a);
}
a=multy(a,a);
m=m>>1;
}
return r;
}
int tr(matrix m)
{
int sum=0;
int i;
for(i=0;i<=m.n-1;i++)
{
sum=(sum+m.data[i][i])%MOD;
}
return sum%MOD;
}
int main()
{
int T;
cin>>T;
while(T--)
{
int n,m;
cin>>n>>m;
int i,j;
matrix ma;
ma.init();
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
cin>>ma.data[i][j];
}
}
ma.n=n;
cout<<tr(fast_mi(ma,m))<<endl;
}
return 0;
}
本博客(http://www.cnblogs.com/cj695/)未标明转载的内容均为本站原创,非商业用途转载时请署名(77695)并注明来源(http://www.cnblogs.com/cj695/)。商业用途请联系作者(77695) QQ:646710030。作者(77695)保留本博客所有内容的一切权利。
独立博客:http://nfeng.cc/
独立博客:http://nfeng.cc/

浙公网安备 33010602011771号