hdu 1575Tr A 矩阵快速幂

来源:互联网 发布:ubuntu 安装maven3 编辑:程序博客网 时间:2024/05/20 18:03
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
#define PI acos(-1.0)
typedef long long LL;
const int MAX=0xfffffff;
using namespace std;
const int mx=11;
const int mod=9973;
int n;
class mat{
public:
    __int64 v[11][11];
    mat()
    {
        memset(v,0,sizeof(v));
    }
};
mat matrix_mul(mat p1,mat p2)
{
    mat t ;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(p1.v[i][j])
                for(int k=0;k<n;k++)
                    t.v[i][k]+=(p1.v[i][j]*p2.v[j][k])%mod;   //忘写mod,差点卡死。。。
    return t;
}
mat matrix_mi(mat p,int k)
{
    mat t ;
    for(int i=0;i<n;i++)  t.v[i][i]=1;
    while(k)
    {
        if(k&1)  t=matrix_mul(t,p);
        k>>=1;
        p=matrix_mul(p,p);
    }
    return  t;
}
int main( )
{
   // freopen("1.txt","r",stdin);
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int k;
        scanf("%d %d",&n,&k);
        mat p;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                scanf("%I64d",&p.v[i][j]);
        mat ans=matrix_mi(p,k);
        LL num=0;
        for(int i=0;i<n;i++)
        {
            num+=ans.v[i][i]%mod;
        }
        printf("%I64d\n",num%mod);
    }
    return 0;
}
0 0
原创粉丝点击