POJ 3233 Matrix Power Series(矩阵快速幂)
来源:互联网 发布:金蝶在线软件 编辑:程序博客网 时间:2024/05/16 18:51
Matrix Power Series
Time Limit: 3000MS Memory Limit: 131072K
Total Submissions: 19338 Accepted: 8161
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 4
0 1
1 1
Sample Output
1 2
2 3
可以找到递推关系 : s[k]=s[k-1]+A^k;
然后构造矩阵,利用矩阵快速幂
具体见代码
#include <iostream>#include <string.h>#include <algorithm>#include <math.h>#include <stdio.h>#include <stdlib.h>using namespace std;int n,k;int m;struct Node{ int a[65][65];};Node multiply(Node a,Node b){ Node c; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { c.a[i][j]=0; for(int k=1;k<=n;k++) { (c.a[i][j]+=(a.a[i][k]*b.a[k][j])%m)%=m; } } } return c;}Node quick(Node a,int x){ Node c; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) c.a[i][j]=(i==j?1:0); for(x;x>0;x>>=1) { if(x&1) c=multiply(c,a); a=multiply(a,a); } return c;}int main(){ while( scanf("%d%d%d",&n,&k,&m)!=EOF) { Node a;Node b;Node c; memset(a.a,0,sizeof(a.a)); memset(b.a,0,sizeof(b.a)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%d",&a.a[i][j+n]); b.a[i+n][j+n]=a.a[i][j+n]; } for(int i=1;i<=n;i++) { b.a[i][i]=1; b.a[i+n][i]=1; } n=n*2; c=multiply(a,quick(b,k)); for(int i=1;i<=n/2;i++) for(int j=1;j<=n/2;j++) if(j==n/2)printf("%d\n",c.a[i][j]); else printf("%d ",c.a[i][j]); } return 0;}
0 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 (矩阵快速幂)
- 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 【矩阵快速幂,矩阵加速】
- SNMP协议详解
- TCP协议Nagle算法和Delayed ACK相互影响实例分析
- tomcat 部署一个简单的 Java Servlet
- Qt 添加资源文件
- Flink on Hadoop 从零搭建
- POJ 3233 Matrix Power Series(矩阵快速幂)
- hdu 1878 欧拉回路
- nodejs 里面执行 es6 的语法语句
- Linux内核编程实验二
- 第七周项目3-用多个文件组织多个类的程序
- 从无到有:软件项目过程敏捷实践
- java.lang.NoClassDefFoundError;java.io.IOException: Cannot initialize Cluster.
- python语法基础归纳(3)--函数
- Android API Guides---Supporting Tablets and Handsets