• HDU1757矩阵快速幂


     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 #define LL long long
     6 using namespace std;
     7 const int N = 10;//矩阵大小
     8 int mod;
     9 int k;//矩阵的幂
    10 int a[15];
    11 
    12 struct Matrix
    13 {
    14     LL mat[N][N];//二维数组存储矩阵
    15     Matrix operator*(const Matrix &m)const
    16     {
    17         Matrix temp;
    18         for(int i = 0; i < N;i++)
    19         {
    20             for(int j = 0; j < N; j++)
    21             {
    22                 temp.mat[i][j] = 0;
    23                 for(int k = 0; k < N; k++)
    24                 {
    25                     temp.mat[i][j]+=mat[i][k]*m.mat[k][j]%mod;
    26                     temp.mat[i][j]%=mod;
    27                 }
    28             }
    29         }
    30         return temp;
    31     }
    32 
    33 };
    34 void Init(Matrix &m)
    35 {
    36     memset(m.mat,0,sizeof(m.mat));
    37     for(int i = 0; i < N;i++)
    38         m.mat[0][i] = a[i];
    39     for(int i = 1; i < N; i++)
    40     {
    41         m.mat[i][i-1] = 1;
    42     }
    43 }
    44 LL qpow(Matrix &m,LL k)
    45 {
    46     Matrix ans;
    47     memset(ans.mat,0,sizeof(ans.mat));
    48     for(int i = 0; i < N; i++)
    49         ans.mat[i][i] = 1;
    50     while(k)
    51     {
    52         if(k&1)ans = ans * m;
    53         m = m*m;
    54         k>>=1;
    55     }
    56     LL sum = 0;
    57     int f[10];
    58     for(int i = 0; i < N; i++)
    59         f[i] = N-i-1;
    60     for(int i = 0; i < N; i++)
    61     {
    62         sum+=ans.mat[0][i]*f[i]%mod;
    63         sum%=mod;
    64     }
    65     return sum%mod;
    66 }
    67 int main()
    68 {
    69     while(scanf("%d%d",&k,&mod)!=EOF)
    70     {
    71         for(int i = 0; i <= 9; i++)
    72             scanf("%d",&a[i]);
    73         if(k<10)
    74         {
    75             printf("%d
    ",k%mod);
    76         }
    77         else
    78         {
    79             Matrix m;
    80             Init(m);
    81             cout<<qpow(m,k-9)<<endl;
    82         }
    83     }
    84     return 0;
    85 }
  • 相关阅读:
    nginx系列之七:限流配置
    nginx系列之六:cache服务
    nginx系列之五: 负载均衡
    nginx系列之四:web服务器
    nginx系列之三:日志配置
    nginx系列之二:配置文件解读
    nginx系列之一:nginx入门
    [面试题]25个MySQL经典面试题
    常用的 Linux iptables 规则
    java new一个对象的过程中发生了什么
  • 原文地址:https://www.cnblogs.com/--lr/p/8980570.html
Copyright © 2020-2023  润新知