为了搞自动机+矩阵的题目,特来学习矩阵快速幂..........非递归形式的求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 (矩阵乘法 非递归形式)相关推荐

  1. POJ 3233 Matrix Power Series 矩阵快速幂 + 二分

    题意:求矩阵的次方和 解题思路:最容易想到方法就是两次二分因为 我们可以把一段  A^1 + A^2 + .......A^K   变成  A^1 + ..A^(K/2) +( A^1 + ..A^( ...

  2. poj 3233 Matrix Power Series

    Matrix Power Series 思路 题意比较简单,就是要求S(n)=∑i=1nAiS(n) = \sum _{i = 1} ^{n} A^ {i}S(n)=∑i=1n​Ai,显然有S(n)= ...

  3. POJ 3233 Matrix Power Series (矩阵分块,递推)

    矩阵乘法是可以分块的,而且幂的和也是具有线性的. 不难得到 Si = Si-1+A*Ai-1,Ai = A*Ai-1.然后矩阵快速幂就可以了. /*************************** ...

  4. poj 3233 Matrix Power Series

    最近一直在做矩阵的题目,这算是一道简单题目吧. 建立一个矩阵的结构体,便于赋值和返回值. S = A + A2 + A3 + - + Ak 如果 S=A+A2 + A3 +A4   S= (A + A ...

  5. Matrix Power Series(矩阵快速幂,二分法/构造矩阵套矩阵)

    传送门 题意: 思路: 方法一:(二分) 分析: 奇偶分类讨论: 1.代码: #include <iostream> #include <cstdio> #include &l ...

  6. 【矩阵乘法】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 ...

  7. 全排列的递归与非递归形式

    2018-3-18 1.递归的主要思路是: n个数的全排列=(n-1个数的全排列)+(另一个数作为前缀) #include<iostream> using namespace std;co ...

  8. 排序算法:快速排序算法实现及分析(递归形式和非递归形式)

    快速排序算法介绍 从名字上就可以看出快速排序算法很嚣张,直接以快速命名.确实快速排序 的确很快速,被列为20世纪十大算法之一.程序员难道不应该掌握么.快速排序(Quick Sort)的基本思想是:通过 ...

  9. 栈的应用4——递归函数的非递归形式(主讲阿克曼函数的非递归形式)

    递归 函数自己调用自己 如求阶乘函数: int jiecheng(int n) {if(n==0)return 1;if(n==1)return 1;else return n*jiecheng(n- ...

最新文章

  1. linux获取后台进程的控制台数据
  2. Node.js 连接数据库
  3. [Swift通天遁地]九、拔剑吧-(9)创建支持缩放、移动、裁切的相机视图控制器
  4. hdu 5101(二分)
  5. 正则表达式匹配C++代码实现
  6. 如何使 子页面顶部栏 覆盖app.json中的顶部栏
  7. PAT_B_1095_Java(25分)
  8. python日志模块----logging
  9. php折半查找算法,PHP如何实现折半查找算法
  10. 「SCOI2015」小凸想跑步 解题报告
  11. swagger 使用
  12. css特效动画——页面加载中 ...
  13. 苹果蓝牙连接不上是什么原因_为什么无线鼠标几乎都不用蓝牙连接呢?延迟、回报率是硬伤...
  14. 使用CSS和javascript制作拼图验证码
  15. android手机与电脑无线连接工具handshaker
  16. 中古调式(调式音阶)
  17. 【回归预测-FNN预测】基于蝙蝠算法优化前馈网络实现数据回归预测附Matlab代码
  18. angularjs的SEO问题解决方案
  19. JS实现右键拖动元素
  20. win7与ubuntu双系统,启动error:no such partition grub rescue

热门文章

  1. 写好SCI论文的语言技巧 --- 学术英语的表达 ---- 主动与被动语态如何取舍
  2. 《白夜行》—— 读后总结
  3. 【Win10】Win10 系统如何打开/关闭护眼模式
  4. Silverlight——简单3D效果的探究
  5. spring.factories详解
  6. 摸鱼必备神器 - 哔哩哔哩 mac迷你客户端
  7. 矩阵运算——矩阵乘除法python
  8. day18 - 玩转Linux操作系统
  9. urllib与urllib2
  10. halcon 一维码读取