zoukankan      html  css  js  c++  java
  • hdu1575矩阵的快速幂

    #include<iostream>
    using namespace std;
    const int MAXN=12;
    const int MOD=9973;
    struct matrix
    {
        int data[MAXN][MAXN];
        int n;
        void init()
        {
            int i,j;
            for(i=0;i<=MAXN-1;i++)
            {
                for(j=0;j<=MAXN-1;j++)
                {
                    data[i][j]=0;
                }
            }
            n=0;
        }
    };
    
    matrix multy(matrix m1,matrix m2)
    {
        matrix r;
        r.init();
        int n=m1.n;
        r.n=n;
        int i,j,k;
        for(i=0;i<=n-1;i++)
        {
            for(j=0;j<=n-1;j++)
            {
                for(k=0;k<=n-1;k++)
                {
                    r.data[i][j]=(r.data[i][j]+m1.data[i][k]*m2.data[k][j])%MOD;
                }
            }
        }
        return r;
    }
    matrix fast_mi(matrix a,int m)
    {
        matrix r;
        r.init();
        r.n=a.n;
        int i=0;
        int n=a.n;
        for(i=0;i<=n-1;i++)
        {
            r.data[i][i]=1;
        }
        while(m)
        {
            if(m&1)
            {
                r=multy(r,a);
            }
            a=multy(a,a);
            m=m>>1;
        }
        return r;
    }
    int tr(matrix m)
    {
        int sum=0;
        int i;
        for(i=0;i<=m.n-1;i++)
        {
            sum=(sum+m.data[i][i])%MOD;
        }
        return sum%MOD;
    }
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            int n,m;
            cin>>n>>m;
            int i,j;
            matrix ma;
            ma.init();
            for(i=0;i<=n-1;i++)
            {
                for(j=0;j<=n-1;j++)
                {
                    cin>>ma.data[i][j];
                }
            }
            ma.n=n;
            cout<<tr(fast_mi(ma,m))<<endl;
        }
        return 0;
    }
    

      

    本博客(http://www.cnblogs.com/cj695/)未标明转载的内容均为本站原创,非商业用途转载时请署名(77695)并注明来源(http://www.cnblogs.com/cj695/)。商业用途请联系作者(77695) QQ:646710030。作者(77695)保留本博客所有内容的一切权利。
    独立博客:http://nfeng.cc/
  • 相关阅读:
    配置Keepalived双主热备
    配置 Keepalived
    Keepalived安装部署
    Keepalived配置Nginx自动重启
    Collectiont和Collections的区别
    HashMap和Hashtable的联系和区别
    Vector和ArrayList的联系和区别
    ArrayList和LinkedList 的联系和区别
    集合和数组的比较
    struts下载
  • 原文地址:https://www.cnblogs.com/cj695/p/2618219.html
Copyright © 2011-2022 走看看