POJ 3233 Matrix Power Series --二分求矩阵等比数列和
2014-09-09 10:02
549 查看
题意:求S(k) = A+A^2+...+A^k.
解法:二分即可。
if(k为奇) S(k) = S(k-1)+A^k
else S(k) = S(k/2)*(I+A^(k/2))
代码:
View Code
解法:二分即可。
if(k为奇) S(k) = S(k-1)+A^k
else S(k) = S(k/2)*(I+A^(k/2))
代码:
#include <iostream> #include <cmath> #include <cstdio> #include <cstdlib> #define SMod m using namespace std; int n,m,k; struct Matrix { int m[32][32]; Matrix() { memset(m,0,sizeof(m)); for(int i=1;i<=n;i++) m[i][i] = 1; } }; Matrix Mul(Matrix a,Matrix b) { Matrix res; int i,j,k; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { res.m[i][j] = 0; for(k=1;k<=n;k++) res.m[i][j] = (res.m[i][j]+(a.m[i][k]*b.m[k][j])%SMod + SMod)%SMod; } } return res; } Matrix add(Matrix a,Matrix b) { Matrix res; memset(res.m,0,sizeof(res.m)); int i,j; for(i=1;i<=n;i++) for(j=1;j<=n;j++) res.m[i][j] = (a.m[i][j]+b.m[i][j])%SMod; return res; } Matrix fastm(Matrix a,int b) { Matrix res; while(b) { if(b&1LL) res = Mul(res,a); a = Mul(a,a); b >>= 1; } return res; } Matrix getsum(Matrix a,int b) { Matrix A = a; Matrix I; if(b == 1) return A; if(b & 1) return add(getsum(a,b-1),fastm(a,b)); else return Mul(getsum(a,b/2),add(I,fastm(a,b/2))); } int main() { int i,j; while(scanf("%d%d%d",&n,&k,&m)!=EOF) { Matrix ans; for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&ans.m[i][j]); ans = getsum(ans,k); for(i=1;i<=n;i++) { printf("%d",ans.m[i][1]%m); for(j=2;j<=n;j++) printf(" %d",ans.m[i][j]%m); puts(""); } } return 0; }
View Code
相关文章推荐
- POJ 3233 Matrix Power Series (矩阵快速幂+等比数列二分求和)
- POJ 3233 Matrix Power Series --二分求矩阵等比数列和
- POJ 3233 Matrix Power Series(矩阵快速幂+二分)
- POJ 3233 Matrix Power Series (矩阵+二分+二分)
- POJ 3233 Matrix Power Series 二分+矩阵乘法
- POJ 3233 Matrix Power Series 矩阵快速幂+二分
- POJ - 3233 Matrix Power Series (矩阵等比二分求和)
- POJ 3233 Matrix Power Series (矩阵乘法+快速幂+等比二分求和) -
- 【矩阵快速幂+二分】Matrix Power Series POJ - 3233
- POJ 3233 Matrix Power Series (矩阵 + 二分)
- 矩阵十大经典题目之三-POJ-3233-Matrix Power Series-两次二分
- POJ 3233-Matrix Power Series(矩阵快速幂+二分求矩阵和)
- POJ 3233 Matrix Power Series(矩阵快速幂+二分)
- poj 3233 Matrix Power Series(矩阵二分,高速幂)
- 【POJ 3233】【二分+矩阵乘法】Matrix Power Series【求S = A + A2 + A3 + … + Ak】
- poj Matrix Power Series 3233 (矩阵快速幂&二分)好题
- POJ 3233 Matrix Power Series(二分 / 矩阵套矩阵)
- POJ 3233 Matrix Power Series(矩阵+二分)
- POJ 3233 Matrix Power Series (矩阵快速幂 + 二分)
- poj 3233 Matrix Power Series(矩阵二分,快速幂)