Matrix Power Series(矩阵快速幂+求幂和)
来源:互联网 发布:农大网络远程教育 编辑:程序博客网 时间:2024/06/06 12:29
Link:http://poj.org/problem?id=3233
Matrix Power Series
Time Limit: 3000MS Memory Limit: 131072KTotal Submissions: 17862 Accepted: 7546
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
2 2 40 11 1
Sample Output
1 22 3
Source
POJ Monthly--2007.06.03, Huang, Jinsong
AC code:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<vector>#include<queue>#include<map>#define LL long long#define MAXN 1000010using namespace std;const int INF=0x3f3f3f3f;//----以下为矩阵快速幂模板-----// //const int mod=1000;//模3,故这里改为3即可 int mod=1000;const int NUM=32;//定义矩阵能表示的最大维数 int N;//N表示矩阵的维数,以下的矩阵加法、乘法、快速幂都是按N维矩阵运算的 struct Mat{//矩阵的类int a[NUM][NUM];Mat(){memset(a,0,sizeof(a));} void init()//将其初始化为单位矩阵 {memset(a,0,sizeof(a));for(int i=0;i<NUM;i++){a[i][i]=1;}}};Mat add(Mat a,Mat b)//(a+b)%mod 矩阵加法 {Mat ans;for(int i=0;i<N;i++){for(int j=0;j<N;j++){ans.a[i][j]=(a.a[i][j]%mod)+(b.a[i][j]%mod);ans.a[i][j]%=mod;}}return ans;}Mat mul(Mat a,Mat b) //(a*b)%mod 矩阵乘法 {Mat ans;for(int i=0;i<N;i++){for(int j=0;j<N;j++){ans.a[i][j]=0;for(int k=0;k<N;k++){ans.a[i][j]=(ans.a[i][j]%mod)+(a.a[i][k]%mod)*(b.a[k][j]%mod);}ans.a[i][j]%=mod;}}return ans;}Mat power(Mat a,int num)//(a^n)%mod 矩阵快速幂 {Mat ans;ans.init();while(num){if(num&1){ans=mul(ans,a);}num>>=1;a=mul(a,a);}return ans;}Mat pow_sum(Mat a,int num)//(a+a^2+a^3....+a^n)%mod 矩阵的幂和{int m;Mat ans,pre;if(num==1)return a;m=num/2;pre=pow_sum(a,m);ans=add(pre,mul(pre,power(a,m)));if(num&1)ans=add(ans,power(a,num));return ans;}void output(Mat a)//输出矩阵 {for(int i=0;i<N;i++){for(int j=0;j<N;j++){printf("%d%c",a.a[i][j],j==N-1?'\n':' ');}}}//----以上为矩阵快速幂模板-----// int main(){//freopen("D:\in.txt","r",stdin);int n,m,i,j,T,k;scanf("%d%d%d",&n,&k,&m); Mat A,S;N=n;mod=m;for(i=0;i<N;i++){for(j=0;j<N;j++){scanf("%d",&A.a[i][j]);}}S=pow_sum(A,k);output(S);return 0;}
0 0
- Matrix Power Series(矩阵快速幂+求幂和)
- 文章标题 POJ : 3233 Matrix Power Series (矩阵快速幂+求等比矩阵的和)
- POJ 3233-Matrix Power Series(矩阵快速幂+二分求矩阵和)
- 【矩阵快速幂】poj3233 Matrix Power Series
- poj Matrix Power Series (矩阵快速幂)
- poj3233 - Matrix Power Series-矩阵快速幂
- poj3233 Matrix Power Series,矩阵快速幂
- Matrix Power Series(矩阵快速幂)
- POJ3233 Matrix Power Series【矩阵快速幂】
- poj3233 Matrix Power Series(矩阵快速幂)
- 【poj3233】Matrix Power Series 矩阵+快速幂
- Matrix Power Series poj3233矩阵快速幂
- [poj3233] Matrix Power Series 矩阵快速幂
- pku 3233 Matrix Power Series(矩阵快速幂)
- poj 3233 Matrix Power Series(矩阵快速幂)
- poj 3233 Matrix Power Series(矩阵快速幂)
- poj 3233 Matrix Power Series(矩阵快速幂)
- Matrix Power Series 矩阵快速幂 + 因式分解(分治)
- 史上最复杂的验证邮件地址的正则表达式
- 二叉树最大深度和最小深度
- hdoj.1288 Hat's Tea【暴力+水题】 2015/08/05
- C# IntPtr pVoid 转 Object
- 纯CSS3实现的8种Loading动画效果
- Matrix Power Series(矩阵快速幂+求幂和)
- Spring中属性注入的方式
- 拦截器、过滤器、监听器区别
- C井字棋
- 过山车
- 网站新手引导(js+jquery)
- 87. Scramble String
- Golomb 编码
- 64位CentOS6.5搭建LAMP环境详细步骤