poj 3323 Matrix Power Series (矩阵乘法 非递归形式)
为了搞自动机+矩阵的题目,特来学习矩阵快速幂..........非递归形式的求Sum(A+A^2+...+A^k)不是很懂,继续弄懂................不过代码简洁明了很多,亮神很给力
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <climits>//形如INT_MAX一类的
#define MAX 100005
#define INF 0x7FFFFFFF
#define REP(i,s,t) for(int i=(s);i<=(t);++i)
#define LL long long
#define mem(a,b) memset(a,b,sizeof(a))
#define mp(a,b) make_pair(a,b)
#define L(x) x << 1
#define R(x) x << 1 | 1
# define eps 1e-5
//#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
using namespace std;
int n,k,m;
__int64 a[33][33];
__int64 x[66][66],y[66][66];void multi(__int64 x[66][66],__int64 y[66][66]) { // A * B__int64 p[66][66];memset(p,0,sizeof(p));int N = n * 2;for(int i=0; i<N; i++) {for(int j=0; j<N; j++) {for(int k=0; k<N; k++) {p[i][j] = (p[i][j] + (x[i][k] * y[k][j]) % m) % m;}}}for(int i=0; i<N; i++) {for(int j=0; j<N; j++) {x[i][j] = p[i][j];}}
}void quickmul(int p) { //将矩阵扩大成2n * 2nfor(int i=0; i<n; i++) {for(int j=0; j<n; j++) {y[i+n][j+n] = a[i][j];x[i][j+n] = a[i][j];}}for(int i=0; i<n; i++) y[i][i] = 1;for(int i=0; i<n; i++) y[i+n][i] = 1;while(p) { //A ^ pif(p & 1) {multi(x,y);}multi(y,y);p = p >> 1;}
}int main() {scanf("%d%d%d",&n,&k,&m);for(int i=0; i<n; i++) {for(int j=0; j<n; j++) {scanf("%d",&a[i][j]);a[i][j] %= m;}}memset(x,0,sizeof(x));memset(y,0,sizeof(y));quickmul(k);for(int i=0; i<n; i++) {printf("%d",x[i][0]);for(int j=1; j<n; j++) printf(" %d",x[i][j]);puts("");}return 0;
}
转载于:https://www.cnblogs.com/james1207/p/3290077.html
poj 3323 Matrix Power Series (矩阵乘法 非递归形式)相关推荐
- POJ 3233 Matrix Power Series 矩阵快速幂 + 二分
题意:求矩阵的次方和 解题思路:最容易想到方法就是两次二分因为 我们可以把一段 A^1 + A^2 + .......A^K 变成 A^1 + ..A^(K/2) +( A^1 + ..A^( ...
- 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 (矩阵分块,递推)
矩阵乘法是可以分块的,而且幂的和也是具有线性的. 不难得到 Si = Si-1+A*Ai-1,Ai = A*Ai-1.然后矩阵快速幂就可以了. /*************************** ...
- poj 3233 Matrix Power Series
最近一直在做矩阵的题目,这算是一道简单题目吧. 建立一个矩阵的结构体,便于赋值和返回值. S = A + A2 + A3 + - + Ak 如果 S=A+A2 + A3 +A4 S= (A + A ...
- Matrix Power Series(矩阵快速幂,二分法/构造矩阵套矩阵)
传送门 题意: 思路: 方法一:(二分) 分析: 奇偶分类讨论: 1.代码: #include <iostream> #include <cstdio> #include &l ...
- 【矩阵乘法】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 ...
- 全排列的递归与非递归形式
2018-3-18 1.递归的主要思路是: n个数的全排列=(n-1个数的全排列)+(另一个数作为前缀) #include<iostream> using namespace std;co ...
- 排序算法:快速排序算法实现及分析(递归形式和非递归形式)
快速排序算法介绍 从名字上就可以看出快速排序算法很嚣张,直接以快速命名.确实快速排序 的确很快速,被列为20世纪十大算法之一.程序员难道不应该掌握么.快速排序(Quick Sort)的基本思想是:通过 ...
- 栈的应用4——递归函数的非递归形式(主讲阿克曼函数的非递归形式)
递归 函数自己调用自己 如求阶乘函数: int jiecheng(int n) {if(n==0)return 1;if(n==1)return 1;else return n*jiecheng(n- ...
最新文章
- linux获取后台进程的控制台数据
- Node.js 连接数据库
- [Swift通天遁地]九、拔剑吧-(9)创建支持缩放、移动、裁切的相机视图控制器
- hdu 5101(二分)
- 正则表达式匹配C++代码实现
- 如何使 子页面顶部栏 覆盖app.json中的顶部栏
- PAT_B_1095_Java(25分)
- python日志模块----logging
- php折半查找算法,PHP如何实现折半查找算法
- 「SCOI2015」小凸想跑步 解题报告
- swagger 使用
- css特效动画——页面加载中 ...
- 苹果蓝牙连接不上是什么原因_为什么无线鼠标几乎都不用蓝牙连接呢?延迟、回报率是硬伤...
- 使用CSS和javascript制作拼图验证码
- android手机与电脑无线连接工具handshaker
- 中古调式(调式音阶)
- 【回归预测-FNN预测】基于蝙蝠算法优化前馈网络实现数据回归预测附Matlab代码
- angularjs的SEO问题解决方案
- JS实现右键拖动元素
- win7与ubuntu双系统,启动error:no such partition grub rescue