Hdu1757 - A Simple Math Problem - 矩阵快速幂
2014-07-27 14:40
429 查看
#include<stdio.h> #include<string.h> int n,m; long long k; struct JZ { int jz[50][50]; }; JZ mul(JZ a,JZ b) { JZ ans; int i,j,k; for(i=0;i<=9;i++) { for(j=0;j<=9;j++) { ans.jz[i][j]=0; for(k=0;k<=9;k++) { ans.jz[i][j]+=(a.jz[i][k]%m)*(b.jz[k][j]%m); } ans.jz[i][j]=ans.jz[i][j]%m; } } return ans; } JZ pow(JZ c,long long d) { JZ ans; int i,j; for(i=0;i<=9;i++) { for(j=0;j<=9;j++) { if(j==i) { ans.jz[i][j]=1; } else { ans.jz[i][j]=0; } } } while(d) { if(d%2==1) { ans=mul(ans,c); } c=mul(c,c); d=d/2; } return ans; } int main() { int i,j; while(scanf("%I64d%d",&k,&m)!=EOF) { JZ f; for(i=0;i<=9;i++) { for(j=0;j<=9;j++) { if(i==0) { f.jz[i][j]=j; } else { f.jz[i][j]=0; } } } JZ simple; int x; for(i=9;i>=0;i--) { scanf("%d",&x); for(j=0;j<=9;j++) { if(j==9) { simple.jz[i][j]=x; } else if(j==i-1) { simple.jz[i][j]=1; } else { simple.jz[i][j]=0; } } } if(k>9) { simple=pow(simple,k-9); f=mul(f,simple); printf("%d\n",f.jz[0][9]%m); } else { printf("%d\n",f.jz[0][k]%m); } } }
相关文章推荐
- 【矩阵快速幂】 hdu1757 A Simple Math Problem
- HDU1757:A Simple Math Problem(矩阵快速幂)
- hdu1757 A Simple Math Problem【矩阵快速幂】
- hdu1757 A Simple Math Problem(矩阵快速幂)
- hdu1757 A Simple Math Problem 矩阵快速幂 水题
- hdu1757 A Simple Math Problem (矩阵快速幂)
- [HDU1757]A Simple Math Problem(矩阵快速幂)
- hdu1757 A Simple Math Problem(矩阵快速幂题解)
- hdu1757 A Simple Math Problem(矩阵快速幂)
- hdu1757 - A Simple Math Problem 矩阵快速幂
- HDU1757-A Simple Math Problem(矩阵快速幂)
- hdu1757 - A Simple Math Problem 矩阵快速幂
- HDU1757-A Simple Math Problem,矩阵快速幂,构造矩阵水过
- hdu1757-- A Simple Math Problem(矩阵快速幂优化)
- hdu 1757 A Simple Math Problem 矩阵优化+快速幂
- 2017 Wuhan University Programming Contest 现场赛 I. A simple math problem(矩阵快速幂)
- 17.7.3小结、【矩阵快速幂】2017武大校赛I题:A simple math problem即nyoj2333、 bzoj2326
- HDU 1757 A Simple Math Problem 矩阵快速幂
- hdu1757 A Simple Math Problem(矩阵乘法)
- hdu 1757 A Simple Math Problem 矩阵优化+快速幂