• UVA10870矩阵快速幂与递推公式的关系


     1 /*UVA10870:
     2 矩阵快速幂与递推公式的关系:关键就是这句话,以后做题能联想到即可
     3 f(n)=a1f(n-1)+...adf(n-d)
     4 */
     5 #include<iostream>
     6 #include<stdio.h>
     7 #include<string.h>
     8 #include<algorithm>
     9 #include<stdlib.h>
    10 #include<math.h>
    11 #include<queue>
    12 #include<vector>
    13 #include<map>
    14 #define ULL unsigned long long
    15 #define LL long long
    16 #define Max_size 17
    17 
    18 using namespace std;
    19 
    20 int d,n,MOD;//
    21 struct Mat
    22 {
    23     LL mat[Max_size][Max_size];
    24 
    25 };
    26 Mat operator*(Mat a,Mat b)
    27 {
    28     Mat c;
    29     memset(c.mat,0,sizeof(c.mat));
    30     for (int i=0;i<d;i++)
    31         for (int j=0;j<d;j++)
    32             for (int k=0;k<d;k++)
    33                 if (a.mat[i][k] && b.mat[k][j])
    34                    c.mat[i][j]=(c.mat[i][j]+a.mat[i][k]*b.mat[k][j])%MOD;
    35     return c;
    36 }
    37 Mat operator+(Mat a,Mat b)
    38 {
    39     Mat c;
    40     memset(c.mat,0,sizeof(c.mat));
    41     for (int i=0;i<d;i++)
    42         for (int j=0;j<d;j++)
    43             c.mat[i][j]=(a.mat[i][j]+b.mat[i][j])%MOD;
    44     return c;
    45 }
    46 Mat E;
    47 
    48 void builtE()
    49 {
    50     memset(E.mat,0,sizeof(E.mat));
    51     for (int i=0;i<Max_size;i++)
    52     {
    53         E.mat[i][i]=1;
    54     }
    55 }
    56 Mat operator^(Mat A,int x)
    57 {
    58     Mat c;
    59     builtE();
    60     c=E;
    61     for ( ; x; x>>=1)
    62     {
    63         if ( x & 1)
    64             c = c * A;
    65         A = A * A;
    66     }
    67     return c;
    68 }
    69 Mat K,F;
    70 int main()
    71 {
    72     while(cin>>d>>n>>MOD)
    73     {
    74         memset(K.mat,0,sizeof(K.mat));
    75         memset(F.mat,0,sizeof(F.mat));
    76         for(int i=d-1;i>=0;i--) cin>>K.mat[i][d-1];
    77         for(int i=0;i<d;i++) K.mat[i+1][i]=1;
    78         K=K^(n-1);
    79         for(int i=0;i<d;i++) cin>>F.mat[0][i];
    80         F=F*K;
    81         cout<<F.mat[0][0]<<endl;
    82     }
    83     return 0;
    84 }
  • 相关阅读:
    Spring MVC国际化
    cvc-complex-type.2.3: Element 'beans' cannot have character [children]
    jstl fmt
    java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL
    eclipse 使用tomcat7.0建立Dynamic Web Project 时 web.xml的问题
    JAVA学习(七)__Spring的@Autowired注入规则
    Java中的默认构造函数
    Spring的国际化(转载)
    java工程中不能存在多个数据库连接jar包
    HDU 3265 Posters
  • 原文地址:https://www.cnblogs.com/little-w/p/3570267.html
Copyright © 2020-2023  润新知