HDU 5015 233 Matrix (矩阵快速幂)
2014-09-15 19:37
465 查看
题目链接:HDU 5015 233 Matrix
题意:已知矩阵的第一行(可以递推出来)和第一列,其他ai,j = ai-1,j +ai,j-1,求an,m
思路:写出先几个ai,j 根据矩阵乘法,得到构造矩阵
其中b1=233;
AC代码:
题意:已知矩阵的第一行(可以递推出来)和第一列,其他ai,j = ai-1,j +ai,j-1,求an,m
思路:写出先几个ai,j 根据矩阵乘法,得到构造矩阵
其中b1=233;
AC代码:
#include<stdio.h> #include<string.h> #define ll __int64 const ll kmod=10000007; struct Matrix { ll m[15][15]; }; struct Matrix I,aa; ll n; void init() { ll i,j; memset(I.m,0,sizeof I.m); for(i=0;i<=14;i++) I.m[i][i]=1; memset(aa.m,0,sizeof aa.m); for(i=1;i<=14;i++) { for(j=i;j<=14;j++) aa.m[i][j]=1; } aa.m[0][0]=1; aa.m[0][1]=3; aa.m[1][1]=10; } Matrix mul(Matrix a,Matrix b) { ll i,j,k; Matrix c; for(i=0;i<n+2;i++) { for(j=0;j<n+2;j++) { c.m[i][j]=0; for(k=0;k<n+2;k++) { c.m[i][j]+=(a.m[i][k]*b.m[k][j])%kmod; c.m[i][j]%=kmod; } } } return c; } Matrix quickpow(Matrix a,ll p) { Matrix b,m; b=I,m=a; while(p) { if(p%2) b=mul(b,m); p/=2; m=mul(m,m); } return b; } int main() { ll m; ll i,j,k; init(); Matrix a,c; while(scanf("%I64d %I64d",&n,&m)!=EOF) { a.m[0][0]=1,a.m[0][1]=233; for(i=2;i<n+2;i++) scanf("%I64d",&a.m[0][i]); Matrix ans; if(m==0) { printf("%I64d\n",a.m[0][n+1]%kmod); continue; } ans=quickpow(aa,m); for(i=0;i<n+2;i++) { c.m[0][i]=0; for(k=0;k<n+2;k++) { c.m[0][i]+=(a.m[0][k]*ans.m[k][i])%kmod; c.m[0][i]%=kmod; } } printf("%I64d\n",c.m[0][n+1]%kmod); } return 0; }
相关文章推荐
- HDU 5015 233 Matrix(矩阵快速幂)
- 【HDU】5015 233 Matrix 矩阵快速幂
- HDU 5015 233 Matrix(矩阵快速幂)
- hdu 5015 233 Matrix(矩阵快速幂)
- HDU 5015 233 Matrix 矩阵快速幂
- HDU 5015 233 Matrix(矩阵快速幂)
- HDU 5015 233 Matrix(矩阵快速幂)
- HDU 5015 233 Matrix(网络赛1009) 矩阵快速幂
- HDU 5015 233 Matrix --矩阵快速幂
- hdu 5015 233 Matrix(数学:矩阵快速幂)
- hdu 5015 233 Matrix 矩阵快速幂 2014 ACM/ICPC Asia Regional Xi'an Online
- hdu 5015 233 Matrix(矩阵快速幂)
- hdu 5015 233 Matrix 线性序列构造矩阵快速幂
- hdu 5015 Matrix 233 矩阵快速幂
- hdu 5015 233 Matrix (矩阵快速幂)
- hdu 5015 233 Matrix (矩阵快速幂)
- hdu 5015 233 Matrix 矩阵快速幂
- HDU 5015 233 Matrix (数论——矩阵快速幂)
- hdu 5015 233 Matrix (递推 矩阵快速幂)
- HDU 5015 233 Matrix(矩阵快速幂)