poj 3233 Matrix Power Series
最近一直在做矩阵的题目,这算是一道简单题目吧。
建立一个矩阵的结构体,便于赋值和返回值。
S = A + A2 + A3 + … + Ak
如果 S=A+A2 + A3 +A4 S= (A + A2)*(E+A2) 所以只需要 二分操作就可以了
再辅助以 快速幂,矩阵乘法,矩阵加法就可以了
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct matrix{int f[40][40];
};
int n,m;
matrix pow(matrix a,matrix b)
{int i,j,k;matrix c;memset(c.f,0,sizeof(c.f));for(i=0;i<n;i++)for(j=0;j<n;j++)for(k=0;k<n;k++)c.f[i][j]=(c.f[i][j]+a.f[i][k]*b.f[k][j])%m;return c;
}
matrix quick_pow(matrix a,int k)
{matrix s;memset(s.f,0,sizeof(s.f));int i;for(i=0;i<n;i++) s.f[i][i]=1;while(k){if(k&1)s=pow(s,a);a=pow(a,a);k=k>>1;}return s;
}
matrix add(matrix a,matrix b)
{int i,j;for(i=0;i<n;i++)for(j=0;j<n;j++)a.f[i][j]=(a.f[i][j]+b.f[i][j])%m;return a;
}
matrix solve(matrix A,int k)
{matrix E;memset(E.f,0,sizeof(E.f));int i;for(i=0;i<n;i++) E.f[i][i]=1;if(k==1) return A;else if(k&1)return add(solve(A,k-1),quick_pow(A,k));elsereturn pow(solve(A,k/2),(add(quick_pow(A,k/2),E)));
}
int main()
{int i,j,k;matrix prematrix;scanf("%d%d%d",&n,&k,&m);for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&prematrix.f[i][j]);matrix ans=solve(prematrix,k);for(i=0;i<n;i++){for(j=0;j<n;j++){if(j==0) printf("%d",ans.f[i][j]%m);else printf(" %d",ans.f[i][j]%m);}printf("\n");}
}
poj 3233 Matrix Power Series相关推荐
- poj 3233 Matrix Power Series
Matrix Power Series 思路 题意比较简单,就是要求S(n)=∑i=1nAiS(n) = \sum _{i = 1} ^{n} A^ {i}S(n)=∑i=1nAi,显然有S(n)= ...
- POJ 3233 Matrix Power Series 矩阵快速幂 + 二分
题意:求矩阵的次方和 解题思路:最容易想到方法就是两次二分因为 我们可以把一段 A^1 + A^2 + .......A^K 变成 A^1 + ..A^(K/2) +( A^1 + ..A^( ...
- POJ 3233 Matrix Power Series (矩阵分块,递推)
矩阵乘法是可以分块的,而且幂的和也是具有线性的. 不难得到 Si = Si-1+A*Ai-1,Ai = A*Ai-1.然后矩阵快速幂就可以了. /*************************** ...
- POJ 3233 Matrix Power Serie
题意:给一个n×n的矩阵A,求S = A + A2 + A3 + - + Ak. 解法:从式子中可得递推式S(n) = S(n - 1) + An,An = An-1×A,可得矩阵递推式 [S(n), ...
- POJ 3233 Matrix Power Serie (矩阵快速幂)
Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + - + Ak. ...
- poj 3323 Matrix Power Series (矩阵乘法 非递归形式)
为了搞自动机+矩阵的题目,特来学习矩阵快速幂..........非递归形式的求Sum(A+A^2+...+A^k)不是很懂,继续弄懂................不过代码简洁明了很多,亮神很给力 # ...
- 【矩阵乘法】Matrix Power Series(poj 3233)
Matrix Power Series poj 3233 题目大意 给你一个矩阵A,让你求S=A+A2+A3+-+AkS = A + A^2 + A^3 + - + A^kS=A+A2+A3+-+Ak ...
- Matrix Power Series
http://poj.org/problem?id=3233 题解: 构造矩阵: a:A 1 b:A 0 A 1 其中 矩阵套矩阵: A代表原矩阵: 1代表单 ...
- POJ3233 Matrix Power Series
原题传送:http://poj.org/problem?id=3233 两个二分:二分 k ,二分矩阵. 求Sn = A + A2 + A3 + - + Ak. 首先我们能矩阵二分快速幂计算出Ak,那 ...
最新文章
- 如何在Eclipse里方便地进行markdown文件编辑
- SAP CRM WebUI Opportunity belongs to me的处理逻辑
- 【C++基础】异常匹配与内建异常类
- delphi7 如何判定dbgrid两行重复_教你如何在服装上加入好看的毛线刺绣花边
- 涉及子模块_COMSOL Multiphysics 5.6 RF模块更新详解
- 3详细参数_大疆精灵3值得入手吗?最详细的实测体验,各种参数应有尽有!
- Java中的Thread.sleep()– Java线程睡眠
- 高考出分,志愿填报成难题
- mysql 小类型_mysql数据类型
- [原创]如何免费使用宝塔专业版
- Thinkpad SL-400 XP驱动下载与安装方法
- 【论文阅读|深读】RolNE: Improving the Quality of Network Embedding with Structural Role Proximity
- 分享Python采集的77个PHP整站程序源码
- 基于EasyNVR摄像机无插件直播方案二次开发实现自己的摄像机IPC-NVR无插件化直播解决方案
- 常用SQL语句大全,数据分析师入门必备!
- 详解HBase架构原理
- 如何为区块链项目设计token机制
- Codeforces1509.B. TMT Document
- not found error :\tensorflow\contrib\coder\python\ops\_coder_ops.so——_gru_ops.so——_lstm_ops.so···
- C语言字符数组显示钻石,c++两种字符串赋值方式 并介绍 C语言下遍历目录文件的方式...