• hdu 1757 A Simple Math Problem (矩阵高速幂)


    这一题构造的矩阵的方法同样。

    须要注意的是。题目中a0~a9 与矩阵相乘的顺序。


    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    #define N 10
    
    using namespace std;
    int mod;
    typedef long long LL;
    
    struct matrix
    {
        LL a[10][10];
    }origin;
    
    
    int n=10,m;
    
    matrix multiply(matrix x,matrix y)
    {
        matrix temp;
        memset(temp.a,0,sizeof(temp.a));
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                for(int k=0;k<n;k++)
                {
                    temp.a[i][j]+=x.a[i][k]*y.a[k][j];
                    temp.a[i][j]=(temp.a[i][j])%mod;
                }
            }
        }
        return temp;
    }
    
    matrix matmod(matrix A,int k)
    {
        matrix res;
    
        memset(res.a,0,sizeof res.a);
        for(int i=0;i<n;i++)res.a[i][i]=1;
    
        while(k)
        {
            if(k&1)
            res=multiply(res,A);
            k>>=1;
            A=multiply(A,A);
        }
        return res;
    }
    
    void print(matrix x)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            cout<<" "<<x.a[i][j];
            puts("");
        }
        printf("---------------
    ");
    }
    
    int main()
    {
        int k;
        while(scanf("%d%d",&k,&mod)!=EOF)
        {
            memset(origin.a,0,sizeof origin.a);
            for(int i=0;i<10;i++)
            {
                origin.a[i][0]=i;
            }
            //print(origin);
            matrix res;
            memset(res.a,0,sizeof res.a);
    
            for(int i=0;i<9;i++)res.a[i][i+1]=1;
            for(int i=9;i>=0;i--)scanf("%d",&res.a[9][i]);
            //print(res);
            res=matmod(res,k);
    
            matrix ans = multiply(res,origin);
    
            printf("%d
    ",ans.a[0][0]);
        }
        return 0;
    }
    


  • 相关阅读:
    微信小程序实现运动步数排行(可删除)
    微信小程序实现运动步数排行(可删除)
    一个文艺的在线生成漂亮的二维码工具网站
    微信小程序常见的UI框架/组件库总结
    天天快车是款精细的游戏
    MHA的几种死法-叶良辰
    编译maxscale
    mydbtest文档
    高山仰止
    docker居然需要3.10以上的内核
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10634353.html
  • Copyright © 2020-2023  润新知