poj 3233 Matrix Power Series(矩阵里面的元素也是矩阵)
来源:互联网 发布:ubuntu 聊天工具 编辑:程序博客网 时间:2024/05/20 23:07
Matrix Power Series
Time Limit: 3000MS Memory Limit: 131072KTotal Submissions: 22895 Accepted: 9544
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
这个题通过观察很容易看出一个式子 S[k]=A+A*S[k-1]
由此可以推出
S[k-1] 1 * A 0 = S[k] 1 (1表示单位矩阵 任何矩阵乘单位矩阵为本身)
A 1
虽然 A是 矩阵但是没关系
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>#include<map>#include<queue>#include<math.h>#include<vector>#include<iostream>using namespace std;typedef long long ll;ll n,mod,k;struct node1 //矩阵里面的矩阵{ ll a[31][31]; node1() { memset(a,0,sizeof(a)); }};node1 operator *(node1 a,node1 b){ node1 ans; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { for(int k=0;k<n;k++) ans.a[i][j]=ans.a[i][j]+a.a[i][k]*b.a[k][j]; ans.a[i][j]=ans.a[i][j]%mod; } return ans;}node1 operator +(node1 a,node1 b){ node1 ans; for(int i=0;i<n;i++) for(int j=0;j<n;j++) ans.a[i][j]=a.a[i][j]+b.a[i][j]; return ans;}struct node2{ node1 b[2][2]; }A,B;node2 operator *(node2 a,node2 b){ node2 ans; for(int i=0;i<2;i++) for(int j=0;j<2;j++) for(int k=0;k<2;k++) ans.b[i][j]=ans.b[i][j]+a.b[i][k]*b.b[k][j]; return ans;}void aa(ll x){ node2 ans=A,p=B; while(x) { if(x&1) ans=ans*p; p=p*p; x=x/2; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { printf("%lld",(ans.b[0][0].a[i][j]%mod+mod)%mod); if(j!=n-1) printf(" "); } printf("\n"); }}int main(){ scanf("%lld%lld%lld",&n,&k,&mod); for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%lld",&A.b[0][0].a[i][j]); for(int i=0;i<n;i++) for(int j=0;j<n;j++) { if(i==j) A.b[0][1].a[i][j]=1; else A.b[0][1].a[i][j]=0; } for(int i=0;i<n;i++) for(int j=0;j<n;j++) { B.b[0][0].a[i][j]=A.b[0][0].a[i][j]; B.b[1][0].a[i][j]=A.b[0][0].a[i][j]; B.b[0][1].a[i][j]=0; if(i==j) B.b[1][1].a[i][j]=1; else B.b[1][1].a[i][j]=0; } aa(k-1);}
阅读全文
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(矩阵快速幂)
- Android6.0+解决getColor()方法过时
- java 求1+2!+3!+...+20!的和
- CodeVs1039[数的划分]
- 创建podsepc
- Volley的简单使用
- poj 3233 Matrix Power Series(矩阵里面的元素也是矩阵)
- 小程序之初识心得
- NLP知识笔记
- 在html页面嵌入applet异常处理办法
- 存储过程被锁住不能编译
- python扒静态网页图片
- Java基础回顾1-4
- 利用递归方法求5!。
- linux网络编程之多线程多进程服务器与进程线程池