poj 3233 Matrix Power Series(等比矩阵求和)
2014-08-08 15:38
393 查看
Description
Given a n × n matrix A and a positive integer k, find the sum
S = A + A2 + A3 + … +
Ak.
Input
The input contains exactly one test case. The first line of input contains three positive integers
n (n ≤ 30), k (k ≤ 109) and m (m < 104). Then follow
n lines each containing n nonnegative integers below 32,768, giving
A’s elements in row-major order.
Output
Output the elements of S modulo m in the same way as A is given.
Sample Input
Sample Output
Given a n × n matrix A and a positive integer k, find the sum
S = A + A2 + A3 + … +
Ak.
Input
The input contains exactly one test case. The first line of input contains three positive integers
n (n ≤ 30), k (k ≤ 109) and m (m < 104). Then follow
n lines each containing n nonnegative integers below 32,768, giving
A’s elements in row-major order.
Output
Output the elements of S modulo m in the same way as A is given.
Sample Input
2 2 4 0 1 1 1
Sample Output
1 2 2 3 代码:
#include<stdio.h> #include<string.h> int n,k,m; const int maxn=31; typedef struct { int M[maxn][maxn]; void init() { memset(M,0,sizeof(M)); for(int i=0;i<maxn;i++) M[i][i]=1; } }matrix; matrix P; matrix I; matrix t=P,ans=I; matrix mult(matrix a,matrix b) //矩阵乘法 { matrix c; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { c.M[i][j]=0; for(int k=0;k<n;k++) c.M[i][j]=(a.M[i][k]*b.M[k][j]+c.M[i][j])%m; } return c; } matrix pow_mod(matrix a,int n) //矩阵快速幂 { matrix b; b.init(); while(n) { if(n&1) b=mult(b,a); n/=2; a=mult(a,a); } return b; } matrix add(matrix a,matrix b) //矩阵加法 { matrix c; for(int i=0;i<n;i++) for(int j=0;j<n;j++) c.M[i][j]=(a.M[i][j]+b.M[i][j])%m; return c; } matrix sum(matrix s,int k) //二分求和 S=(1+A^(k/2))*((A+A^2+A^3+..A^K/2)) { if(k==1) return s; matrix tmp; tmp.init(); tmp=add(tmp,pow_mod(s,k/2)); //(1+A^(k/2)) tmp=mult(tmp,sum(s,k/2)); //(1+A^(k/2))*(A+A^2+A^3+..A^K/2) if(k&1) tmp=add(tmp,pow_mod(s,k)); return tmp; } int main() { while(scanf("%d %d %d",&n,&k,&m)!=EOF) { matrix s; for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&s.M[i][j]); s=sum(s,k); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(j) printf(" "); printf("%d",s.M[i][j]%m); } printf("\n"); } } return 0; }
相关文章推荐
- 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 (矩阵&快速等比数列求和取模)
- [ACM] POJ 3233 Matrix Power Series (求矩阵A+A^2+A^3...+A^k,二分求和或者矩阵转化)
- [ACM] POJ 3233 Matrix Power Series (求矩阵A+A^2+A^3...+A^k,二分求和或者矩阵转化)
- 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 (矩阵快速幂+等比数列二分求和)
- POJ 3233 Matrix Power Series 矩阵快速幂+二分求和
- POJ 3233 Matrix Power Series 矩阵等比数列求和