POJ 2118 矩阵乘法
2012-10-10 21:54
232 查看
题意:
an=Σ1<=i<=k (an-i*bi) mod 10000
分析:
典型的矩阵乘法解线性递推式~
无限YM MATRIX67神犇~
http://www.matrix67.com/blog/archives/276/comment-page-1#comment-223435
View Code
an=Σ1<=i<=k (an-i*bi) mod 10000
分析:
典型的矩阵乘法解线性递推式~
无限YM MATRIX67神犇~
http://www.matrix67.com/blog/archives/276/comment-page-1#comment-223435
View Code
#include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #define SIZE 110 #define mod 10000 using namespace std; int n,m,a[SIZE],b[SIZE]; struct MT { int x,y; int mt[SIZE][SIZE]; }ans,def; inline MT operator *(MT a,MT b) { MT c; memset(c.mt,0,sizeof c.mt); c.x=a.x; c.y=b.y; for(int i=1;i<=a.x;i++) for(int j=1;j<=b.y;j++) for(int k=1;k<=b.x;k++) c.mt[i][j]=(c.mt[i][j]+(a.mt[i][k]%mod)*(b.mt[k][j]%mod))%mod; return c; } bool read() { for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++) scanf("%d",&b[i]); scanf("%d",&m); if(m<=n-1) {printf("%d\n",a[m]);return false;} m=m-(n-1); for(int i=1;i<=n;i++) ans.mt[i][1]=a[i-1]; ans.x=n; ans.y=1; memset(def.mt,0,sizeof def.mt); for(int i=1;i<n;i++) def.mt[i][i+1]=1; for(int i=1;i<=n;i++) def.mt [i]=b[n-i]; def.x=def.y=n; return true; } void go() { while(m) { if(m&1) ans=def*ans; def=def*def; m>>=1; } printf("%d\n",ans.mt [1]); } int main() { while(scanf("%d",&n),n) { if(!read()) continue; else go(); } return 0; }
相关文章推荐
- Firepersons - POJ 2118 矩阵乘法递推
- POJ - 2118 矩阵乘法来解线性递推
- POJ 3318 思维 + 矩阵乘法 || 随机化算法
- POJ 3213 矩阵乘法(优化)
- POJ-1977 很好的矩阵乘法题..
- POJ 3233 快速矩阵乘法
- POJ 3735 Training little cats(矩阵乘法 + 稀疏矩阵优化)——2016弱校联盟十一专场10.7(12点场)
- poj 3070 Fibonacci 【矩阵乘法】
- poj 3070 Fibonacci + 矩阵乘法(矩阵快速幂)
- POJ 3213 矩阵乘法(优化)
- poj3233之经典矩阵乘法
- POJ 3420 构造矩阵乘法
- poj 3070 题解 矩阵乘法
- poj 3233 矩阵乘法累加
- 数学(矩阵乘法,随机化算法):POJ 3318 Matrix Multiplication
- POJ[3744]Scout YYF I 矩阵乘法
- Poj 2778 [AC自动机,矩阵乘法]
- POJ 3233 Matrix Power Series (矩阵乘法+快速幂+等比二分求和) -
- POJ 3213 PM3 矩阵乘法优化
- POJ 2118 Firepersons 线性递推 矩阵快速幂