HDU1575 Tr A

来源:互联网 发布:淘宝卖家体验用心在哪 编辑:程序博客网 时间:2024/05/22 17:23


HDU1575:裸的矩阵快速幂(二进制迭代法),用结构体能省不少事,想的话也可以重载个乘法

#include<cstdio>#include<iostream>#define N 11using namespace std;const int mod=9973;int n;struct matrix{    int i,j;    int a[N][N];    void init()    {        for(i=0;i<N;i++)            for(j=0;j<N;j++)                a[i][j]=(i==j)?1:0;    }};matrix matrixmult(matrix a,matrix b)//矩阵相乘{    matrix c;    int i,j,k;    for(i=0;i<n;i++)        for(j=0;j<n;j++)        {            c.a[i][j]=0;            for(k=0;k<n;k++)                c.a[i][j]+=((a.a[i][k]*b.a[k][j])%mod);            c.a[i][j]%=mod;        }    return c;}matrix lm(matrix a,int k)//快速幂{    matrix ans;    ans.init();    while(k>0)    {        if(k&1)            ans=matrixmult(a,ans);        k>>=1;        a=matrixmult(a,a);    }    return ans;}int main(){    int t,k,i,j;    matrix s;    while(~scanf("%d",&t))    {        while(t--)        {            int sum=0;            cin>>n>>k;            for(i=0;i<n;i++)                for(j=0;j<n;j++)                    scanf("%d",&s.a[i][j]);            s=lm(s,k);            for(i=0;i<n;i++)                sum+=s.a[i][i];            sum%=mod;                cout<<sum<<endl;        }    }    return 0;}
0 0
原创粉丝点击