zoukankan      html  css  js  c++  java
  • hdu 1757 A Simple Math Problem (矩阵快速幂,简单)

    题目

    也是和LightOJ 1096 和LightOJ 1065 差不多的简单题目。

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    int num,mod;
    struct matrix
    {
        int a[10][10];
    };
    
    matrix multiply(matrix x,matrix y)//矩阵乘法
    {
           matrix temp;
           for(int i=0;i<num;i++)
           {
                   for(int j=0;j<num;j++)
                   {
                           int ans=0;
                           for(int k=0;k<num;k++)
                           {
                                   ans+=((x.a[i][k]*y.a[k][j])%mod);
                           }
                           temp.a[i][j]=ans%mod;
                   }
           }
           return temp;
    }
    
    matrix calc(matrix origin ,matrix answ,int n)//矩阵快速幂——answ*origin^n
    {
         while(n)
         {
                 if(n%2==1)//原来比赛时一直是这里被我不小心改成了0,怪不得案例一直都过不了
                        answ=multiply(origin,answ);
                 origin=multiply(origin,origin);
                 n/=2;
         }
         return answ;
    }
    
    int main()
    {
        int n;
        while(scanf("%d%d",&n,&mod)!=EOF)
        {
            matrix origin= {0,1,0,0,0,0,0,0,0,0,
                            0,0,1,0,0,0,0,0,0,0,
                            0,0,0,1,0,0,0,0,0,0,
                            0,0,0,0,1,0,0,0,0,0,
                            0,0,0,0,0,1,0,0,0,0,
                            0,0,0,0,0,0,1,0,0,0,
                            0,0,0,0,0,0,0,1,0,0,
                            0,0,0,0,0,0,0,0,1,0,
                            0,0,0,0,0,0,0,0,0,1};
            matrix answ={0,0,0,0,0,0,0,0,0,0,
                         1,0,0,0,0,0,0,0,0,0,
                         2,0,0,0,0,0,0,0,0,0,
                         3,0,0,0,0,0,0,0,0,0,
                         4,0,0,0,0,0,0,0,0,0,
                         5,0,0,0,0,0,0,0,0,0,
                         6,0,0,0,0,0,0,0,0,0,
                         7,0,0,0,0,0,0,0,0,0,
                         8,0,0,0,0,0,0,0,0,0,
                         9,0,0,0,0,0,0,0,0,0};
            num=10;
            for(int i=9;i>=0;i--)//要注意这里的a9~a0的输入顺序
                scanf("%d",&origin.a[9][i]);
    
            answ=calc(origin,answ,n-9);
            printf("%d
    ",answ.a[9][0]%mod);
        }
        return 0;
    }
    View Code
    一道又一道,好高兴!
  • 相关阅读:
    postgresql-磁盘空间不足问题排查
    postgresql-删除重复数据
    postgresql-排序
    磁盘耗时时间
    nginx 报错 The plain HTTP request was sent to HTTPS port
    nodejs使用pkg打包
    npm 设置镜像源
    IDEA通过Ctrl+鼠标滚轮放大/缩小字体
    使 nodejs 代码 在后端运行(nohup)
    加密HSQLDB的.script文件
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3558471.html
Copyright © 2011-2022 走看看