zoukankan      html  css  js  c++  java
  • Tr A HDU1575

    矩阵基本算法

    #include<cstdio>
    using namespace std;
    int n;
    struct  matrix
    {
        int m[15][15];
    
    }ans,base;
    
    matrix  multi( matrix a,matrix b )//矩阵乘法
    {
        matrix temp;
        for(int i=0;i<n;i++)//n阶矩阵
        {
            for(int j=0;j<n;j++)
            {
                temp.m[i][j]=0;
                for(int k=0;k<n;k++)
                    temp.m[i][j]=(temp.m[i][j]+a.m[i][k]*b.m[k][j])%9973;
            }
        }
     return temp;
    }
    
    
    matrix fast(matrix a,  int k)//矩阵a的k次幂
    {
        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()
    {
        int cas;
        scanf("%d",&cas);
        while(cas--)
        {
            int k;
            scanf("%d%d",&n,&k);
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                  scanf("%d",&base.m[i][j]);
            matrix temp=fast(base, k);
            int sum=0;
            for(int i=0;i<n;i++)
                sum=(sum+temp.m[i][i])%9973;
            printf("%d
    ",sum);
    
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    第三次作业
    第二次作业
    第一次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    随笔
    第五次作业
    第四次作业
  • 原文地址:https://www.cnblogs.com/bxd123/p/10346830.html
Copyright © 2011-2022 走看看