• HDU 1757矩阵快速幂


    #include <iostream>
    #include <algorithm>
    #include <cstdlib>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <cstdio>
    #include <queue>
    #include <cmath>
    
    using namespace std;
    
    const int Max = 13;
    
    struct Matrix{
            int  m[Max][Max];
    } ;
    Matrix I;
    Matrix pag;
    int n,M;
    
    void init(int n){
        for(int i=1;i<=n;i++)
            I.m[i][i]=1;
    }
    void print(Matrix c){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                printf("%d ",c.m[i][j]);
            }
            printf("\n");
        }
    }
               
    Matrix matrixmul(Matrix a,Matrix b) //矩阵乘法
    {
           int i,j,k;
           Matrix c;
           for (i = 1 ; i <= n; i++)
               for (j = 1; j <= n;j++)
                 {
                     c.m[i][j] = 0;
                     for (k = 1; k <= n; k++)
                         c.m[i][j] += (a.m[i][k] * b.m[k][j])%M;
                     c.m[i][j] %= M;
                 }
           return c;
    }
    
    Matrix quickpagow(int nn)
    {
           Matrix m = pag, b = I;//b是单位矩阵
           while (nn >= 1)
           {
                 if (nn & 1)
                    b = matrixmul(b,m);
                 nn = nn >> 1;
                 m = matrixmul(m,m);
           }
           return b;
    }
    
    int main()
    {
        int r;
        while(scanf("%d %d",&r,&M) == 2){
            n=10;
            init(n);
            if(r<=9){
                printf("%d\n",n);
                continue;
            }
            memset(pag.m,0,sizeof(pag.m));
            for(int i=1;i<=10;i++)
                scanf("%d",&pag.m[1][i]);
            for(int i=2;i<=10;i++){
                pag.m[i][i-1] = 1;
            }
            r=r-9;
            Matrix A = quickpagow(r);
            int ans=0;
            for(int i=1;i<=10;i++){
                ans += A.m[1][i] * (10-i);
                ans %= M;
            }
            printf("%d\n",ans);
        }
        return 0;
    }
  • 相关阅读:
    01
    py5.30
    py 5.28
    py5.25
    py 5.24
    py 5.22
    py5.21
    py 5.18
    py 5.17
    py 5.16
  • 原文地址:https://www.cnblogs.com/gray035/p/2982307.html
Copyright © 2020-2023  润新知