Matrix Recurrence
给定矩阵$A,B$,且有
$$
f(0) = A ,f(i) =B * \prod_{i=w(i)}^{i-1}f(i)
$$
求f(n)
其中,当w(i)单增时,可以做到$O(n*m^3)$,注意要优化取模运算。
对于加入的f(i),我们压入栈中,维护栈的 元素积。
同时维护栈之前的一段元素的后缀积,当w(i)超过非栈元素的右边界时,将栈内元素暴力化为后缀积。
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 #define LL long long 6 #define N 1000010 7 8 using namespace std; 9 10 int P; 11 12 int m,n; 13 14 struct MA 15 { 16 LL a[5][5]; 17 void scan() 18 { 19 for(int i=0,j;i<m;i++) 20 for(j=0;j<m;j++) scanf("%lld",&a[i][j]); 21 } 22 void init() 23 { 24 memset(a,0,sizeof(a)); 25 for(int i=0;i<m;i++) a[i][i]=1; 26 } 27 void print() 28 { 29 for(int i=0;i<m;i++) 30 { 31 for(int j=0;j<m;j++) printf("%lld ",a[i][j]); 32 printf("\n"); 33 } 34 } 35 }A0,B; 36 37 MA sta[N]; 38 MA pre[N]; 39 MA sumv,A; 40 int c[N],tot,r; 41 42 MA mul(MA x,MA y) 43 { 44 MA ans; 45 for(int i=0,j,k;i<m;i++) 46 for(j=0;j<m;j++) 47 { 48 ans.a[i][j]=0; 49 for(k=0;k<m;k++) 50 ans.a[i][j] += x.a[i][k]*y.a[k][j]; 51 } 52 for(int i=0,j;i<m;i++) 53 for(j=0;j<m;j++) ans.a[i][j]%=P; 54 return ans; 55 } 56 57 void build() 58 { 59 int tmp=r; 60 for(int i=1;i<=tot;i++) pre[++r]=sta[i]; 61 tot=0; 62 for(int i=r-1;i>=tmp+1;i--) pre[i]=mul(pre[i], pre[i+1]); 63 sumv.init(); 64 } 65 66 int main() 67 { 68 while(~scanf("%d%d%d",&n,&m,&P)) 69 { 70 A0.scan(); 71 B.scan(); 72 for(int i=1;i<=n;i++) scanf("%d",&c[i]); 73 for(int i=0;i<=n;i++) pre[i].init(); 74 r=0; 75 tot=0; 76 pre[0]=A0; 77 sumv.init(); 78 for(int i=1;i<=n;i++) 79 { 80 if(c[i]>r) build(); 81 A=mul(pre[c[i]],sumv); 82 A=mul(A,B); 83 sta[++tot]=A; 84 sumv=mul(sumv,A); 85 } 86 A.print(); 87 } 88 return 0; 89 }
View Code
。
当w(i)不单增时,我们可以维护$8$个长度为$6,6^2,6^3...6^8$的队列,每一次将新加入的元素先压入长度为$6$的队列,并$O(m^3*6)$维护后缀积,当队列满了之后,将其作为一个元素加入$6^2$的队列,同时维护至多$6$个元素的后缀积,当$6^2$满了之后$O(m^3*6^2)$ 暴力将其变为一个元素(算出$6^2$个元素的后缀积),并作为整体压入下一序列。
每个元素最多被更新了8次,所以 $O(8*n*m^3)$
转载于:https://www.cnblogs.com/lawyer/p/6443625.html
Matrix Recurrence相关推荐
- C++实现线性递归矩阵 linear recurrence matrix算法(附完整源码)
C++实现线性递归矩阵 linear recurrence matrix算法 C++实现线性递归矩阵 linear recurrence matrix算法完整源码(定义,实现,main函数测试) C+ ...
- CF1182E Product Oriented Recurrence
CF1182E Product Oriented Recurrence 有一个递推式 \(f_x=c^{2x-6}\cdot f_{x-1}\cdot f_{x-2}\cdot f_{x-3}\;\; ...
- 【Rosalind】Rabbits and Recurrence Relations
题目描述 Problem A sequence is an ordered collection of objects (usually numbers), which are allowed to ...
- Codeforces 1182E Product Oriented Recurrence 矩阵快速幂
Product Oriented Recurrence 先化简原式子 c ^ x * f[x] = c ^ (x-1) * f[x-1] * c ^ (x-2) * f[x-2] * c ^ (x- ...
- Lung Cancer Recurrence Risk Prediction through Integrated Deep Learning Evaluation【AI 肺癌复发预测】详解
[利用深度学习评估预测肺癌复发风险:Lung Cancer Recurrence Risk Prediction through Integrated Deep Learning Evaluation ...
- Android 自定义View ——Matrix (矩阵)
Matrix的作用: Matrix类包含一个3x3矩阵,用于转换坐标 Matrix (矩阵) 的原理很遗憾自己目前也是含糊的很,这里就不说了,记录自己在项目使用的方法, 这里就简单的记录下Matrix ...
- Codeforces 903F Clear The Matrix(状态压缩DP)
题目链接 Clear The Matrix 题意 给定一个$4 * n$的矩形,里面的元素为$'.'$或$'*'$.现在有$4$种正方形可以覆盖掉$'*'$,正方形的边长分别为$1,2,3,4$. 求 ...
- ie旋转滤镜Matrix
旋转一个元素算是一个比较常见的需求了吧,在支持CSS3的浏览器中可以使用transform很容易地实现,这里有介绍:http://www.css88.com/archives/2168,这里有演示ht ...
- Eigen(1):Matrix模板类
Matrix是一个模板类,利用模板类可以定义矩阵类. 矩阵类模板: 1Matrix类有6个模板参数,只需要了解前3个就好了. Matrix<typename Scalar, int RowsAt ...
最新文章
- Pandas 中的 concat 函数
- python中构造方法可以被继承吗_构造函数是在python中继承的吗
- git工具tig用法
- 快速谱峭度matlab,一种基于快速谱峭度分析的泵潜在空化故障检测方法与流程
- 【Python】list转str
- 【Spark】一条 SQL 在 Apache Spark 之旅(上)
- java性能优化文章
- 给初学者的 RxJava2.0 教程 (九)
- LCD1602字符串显示(STM32F103)
- 20种最常见的网络安全攻击类型
- python如何循环sql语句_sql语句的for循环语句怎么写
- pycharm远程控制服务器(局域网 内网穿透)
- 凸优化读书笔记01(仿射集合、仿射组合,仿射包)
- 人脸识别活体检测技术探讨:多物理特征融合加分类器的算法技术
- wordpress企业网站主题
- 制作自己的openwrt刷机包_openwrt刷机教程
- 【仅剩12小时】Python科研绘图教程,40+绘图案例(附完整代码)
- 线上插画培训班有用吗,教你选靠谱的插画课程
- 《过目不忘的读书方法》读书摘要
- 手机唯一标识IMEI以及与IMSI的区别
热门文章
- 【前端使用插件js-export-excel导出excel】
- 笔记:机器学习的工作流程
- CRecordset::GetRecordCount()
- 60FPS你有吗?现代电影级游戏效果全解析
- PP-LCNet-A Lightweight CPU Convolutional Neural Network
- 彩虹易支付推广模式查单投诉文件发布
- k8s的Pods里面ImagePullBackOff的网络问题
- 基础乐理 节奏联系题,很重要
- 基于MATLAB软件GUI界面的可编程电音合成器软件
- 计算机raid基础知识,主板知识详解:板载 RAID