hdu 1575 Tr A(矩阵操作入门)

来源:互联网 发布:深圳淘宝店铺装修 编辑:程序博客网 时间:2024/06/16 14:45


hdu 1575 Tr A


矩阵乘法,矩阵快速幂


#include<stdio.h>#include<string.h>#define MOD 9973struct matrix{    int m[12][12];};int n;matrix multi(const matrix &a,const matrix &b){    matrix ans;    memset(&ans,0,sizeof(ans));    for(int i=0;i<n;i++)        for(int j=0;j<n;j++)            for(int k=0;k<n;k++)            {                ans.m[i][j]+=a.m[i][k]*b.m[k][j];                ans.m[i][j]%=MOD;            }    return ans;}matrix pow(matrix a,int k){    matrix ans;    for(int i=0;i<n;i++)        for(int j=0;j<n;j++)            if(i==j) ans.m[i][j]=1;            else ans.m[i][j]=0;    while(k)    {        if(k&1) ans=multi(ans,a);        a=multi(a,a);        k>>=1;    }    return ans;}int main(){    matrix a,ans;    int cas,k;    scanf("%d",&cas);    while(cas--)    {        scanf("%d%d",&n,&k);        for(int i=0;i<n;i++)            for(int j=0;j<n;j++)                scanf("%d",&a.m[i][j]);        ans=pow(a,k);        int sum=0;        for(int i=0;i<n;i++)            sum=(sum+ans.m[i][i])%MOD;        printf("%d\n",sum);    }    return 0;}


0 0
原创粉丝点击