zoukankan      html  css  js  c++  java
  • hdu 1757 矩阵快速幂 **

    一看正确率这么高,以为是水题可以爽一发,结果是没怎么用过的矩阵快速幂,233

    题解链接:点我

     1 #include<iostream>
     2 #include<cstring>
     3 const int N=10;
     4 using namespace std;
     5 int k,m;
     6 struct Matrix{
     7     int map[N][N];
     8 };
     9 
    10 Matrix matrix;
    11 
    12 void Initiate(){
    13     for(int i=0;i<N;i++){
    14         scanf("%d",&matrix.map[0][i]);
    15     }
    16     for(int i=1;i<N;i++){
    17         for(int j=0;j<N;j++){
    18             if(i==(j+1))matrix.map[i][j]=1;
    19             else matrix.map[i][j]=0;
    20         }
    21     }
    22 }
    23 
    24 //矩阵相乘
    25 Matrix Mul(Matrix &a,Matrix &b){
    26     Matrix c;
    27     for(int i=0;i<N;i++){
    28         for(int j=0;j<N;j++){
    29             c.map[i][j]=0;
    30             for(int k=0;k<N;k++){
    31                 c.map[i][j]+=a.map[i][k]*b.map[k][j];
    32             }
    33             c.map[i][j]%=m;
    34         }
    35     }
    36     return c;
    37 }
    38 
    39 //快速幂
    40 Matrix Pow(int n){
    41     Matrix t;
    42     if(n==1)return matrix;
    43     if(n&1)return Mul(matrix,Pow(n-1));
    44     else {
    45         Matrix temp=Pow(n>>1);
    46         return Mul(temp,temp);
    47     }
    48 }
    49 
    50 
    51 int main(){
    52     while(scanf("%d%d",&k,&m)!=EOF){
    53         Initiate();
    54         if(k<10){
    55             printf("%d
    ",k%m);
    56             continue;
    57         }
    58         Matrix temp=Pow(k-9);
    59         int ans=0;
    60         for(int i=0;i<N;i++){
    61             ans+=temp.map[0][i]*(N-i-1); //最后要乘上f[9],f[8],...,f[1],f[0];
    62             ans%=m;
    63         }
    64         printf("%d
    ",ans);
    65     }
    66     return 0;
    67 }
  • 相关阅读:
    Windows 服务程序(一)
    API---注册表编程
    API---文件操作
    main(argc, char *argv[])
    C 自删除技术---批处理方式
    分治法排序
    TDD尝试:nodejs单元测试
    尝试create tech team
    Yum重装走过的坑
    求生欲很强的数据库
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4680425.html
Copyright © 2011-2022 走看看