HDU 1757 矩阵快速幂
2017-06-15 17:39
351 查看
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <cmath> using namespace std; int m; struct matrix { long long mat[20][20]; matrix() { memset(mat,0,sizeof(mat)); } }; matrix mul(matrix A,matrix B) { matrix C; for(int i=1;i<=10;i++) { for(int j=1;j<=10;j++) { for(int k=1;k<=10;k++) { C.mat[i][j]=(C.mat[i][j]+A.mat[i][k]*B.mat[k][j]%m)%m; } } } return C; } matrix quickmi(matrix A,long long n) { matrix B; for(int i=1;i<=10;i++) B.mat[i][i]=1; while(n>0) { if(n&1) B=mul(A,B); A=mul(A,A); n=n/2; } return B; } int main() { long long k; while(scanf("%I64d %d",&k,&m)!=EOF) { if(k>9){ k=k-9; matrix A; for(int i=1;i<=10;i++) { scanf("%I64d",&A.mat[1][i]); A.mat[i+1][i]=1; } A=quickmi(A,k); printf("%I64d\n",(9*A.mat[1][1]%m+8*A.mat[1][2]%m+7*A.mat[1][3]%m+6*A.mat[1][4]%m+5*A.mat[1][5]%m+4*A.mat[1][6]%m+3*A.mat[1][7]%m+2*A.mat[1][8]%m+1*A.mat[1][9]%m)%m); } else { printf("%I64d\n",k%m); } } return 0; }
相关文章推荐
- 【矩阵快速幂】hdu 1757
- HDU 1757,1575,2604,2256 矩阵快速幂总结
- HDU 1757 A Simple Math Problem 矩阵快速幂
- hdu 1757 A Simple Math Problem 矩阵快速幂
- hdu 1757 A Simple Math Problem (矩阵快速幂,简单)
- HDU 1757 A Simple Math Problem 矩阵快速幂
- HDU 1757 A Simple Math Problem 矩阵快速幂
- HDU 1757 A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem (矩阵快速幂)
- hdu 1757 A Simple Math Problem_矩阵快速幂
- hdu 1757 A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem(矩阵快速幂)
- hdu - 1757 - A Simple Math Problem(矩阵快速幂)
- hdu 1757 A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem(矩阵快速幂)
- hdu 1757 矩阵快速幂
- hdu 1757 A Simple Math Problem(矩阵快速幂)
- HDU 1757-A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem 矩阵快速幂