您的位置:首页 > 其它

hdu 1575 矩阵快速幂

2014-03-18 10:41 260 查看
#include<stdio.h>

#include<string.h>

#define N 100

int map

;

int power(int n,int c) {

int sum

,i,j,k,mapan

;

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

sum[i][j]=map[i][j];

c--;

while(c) {

if(c&1) {

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

mapan[i][j]=sum[i][j];

memset(sum,0,sizeof(sum));

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

for(k=1;k<=n;k++)

sum[i][j]=(sum[i][j]+mapan[i][k]*map[k][j])%9973;

}

memset(mapan,0,sizeof(mapan));

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

for(k=1;k<=n;k++)

mapan[i][j]=(mapan[i][j]+map[i][k]*map[k][j])%9973;

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

map[i][j]=mapan[i][j];

c/=2;

}

int su=0;

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if(i==j)

su=(su+sum[i][j])%9973;

return su;

}

int main() {

int n,t,k,i,j;

scanf("%d",&t);

while(t--) {

scanf("%d%d",&n,&k);

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

scanf("%d",&map[i][j]);

printf("%d\n",power(n,k));

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: