蓝书(算法竞赛进阶指南)刷题记录——POJ3233 Matrix Power Series(分治+矩阵乘法)

刘汝佳《算法竞赛入门经典——训练指南》源代码 《算法竞赛入门经典——训练指南》代码仓库 限于篇幅,书上并没有给出所有例题的代码,这里给出了所有例题的代码,并且改进了书上的一些代码。 立即下载

题目:POJ3233.
题目大意:给定 k k k和一个 n ∗ n n*n n∗n的矩阵 A A A,求 ∑ i = 1 k A i \sum_{i=1}^{k}A^i ∑i=1k​Ai.
1 ≤ k ≤ 1 0 9 , 1 ≤ n ≤ 30 1\leq k\leq 10^9,1\leq n\leq 30 1≤k≤109,1≤n≤30.

一开始想到的是直接用等比数列求和公式,一看好像不会矩阵求逆…

然后想到 ∑ i = l r A i = A l − 1 ∑ i = 1 r − l + 1 A i \sum_{i=l}^{r}A^i=A^{l-1}\sum_{i=1}^{r-l+1}A^{i} ∑i=lr​Ai=Al−1∑i=1r−l+1​Ai,顿时有了思路.

考虑分治解决这个问题,开始处理区间 [ 1 , n ] [1,n] [1,n]的时候考虑处理出 l a n s = [ 1 , ⌊ n 2 ⌋ ] lans=[1,\left\lfloor\frac{n}{2}\right\rfloor] lans=[1,⌊2n​⌋]的答案,然后分情况讨论:
1.当 2 ∣ n 2|n 2∣n时,直接计算出 [ ⌊ n 2 ⌋ , n ] [\left\lfloor\frac{n}{2}\right\rfloor,n] [⌊2n​⌋,n]的答案为 r a n s = l a n s ∗ A n 2 rans=lans*A^{\frac{n}{2}} rans=lans∗A2n​.
2.否则,计算出 [ ⌊ n 2 ⌋ , n − 1 ] [\left\lfloor\frac{n}{2}\right\rfloor,n-1] [⌊2n​⌋,n−1]的答案为 r a n s = l a n s ∗ A ⌊ n 2 ⌋ rans=lans*A^{\left\lfloor\frac{n}{2}\right\rfloor} rans=lans∗A⌊2n​⌋,然后再加上一个 A n A^n An即可.

考虑到矩阵的幂可以用快速幂直接求出,那么我们就可以做到 O ( log ⁡ k ) O(\log k) O(logk)次递归,递归到每一层都只用 O ( log ⁡ k ) O(\log k) O(logk)的时间计算,总复杂度 O ( n 3 log ⁡ 2 k ) O(n^3\log^2 k) O(n3log2k).

代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
  using namespace std;

#define Abigail inline void
typedef long long LL;

const int N=30;

int n,k,mod;
struct matrix{
  int n,m,v[N+9][N+9];
  
  matrix operator + (const matrix &p)const{
  	matrix tmp=matrix();
  	tmp.n=n;tmp.m=m;
	for (int i=1;i<=n;++i)
	  for (int j=1;j<=m;++j)      //手残把j写成了i
	    tmp.v[i][j]=(v[i][j]+p.v[i][j])%mod;
	return tmp;
  }
  
  matrix operator * (const matrix &p)const{
    matrix tmp=matrix();      //然后没有初始化...
    tmp.n=n;tmp.m=p.m;
    for (int i=1;i<=tmp.n;++i)
      for (int k=1;k<=m;++k)
        for (int j=1;j<=tmp.m;++j)
          tmp.v[i][j]=(tmp.v[i][j]+v[i][k]*p.v[k][j])%mod;
    return tmp;
  }
  
}a;

matrix e(int n){
  matrix e=matrix();
  for (int i=1;i<=n;++i)
    e.v[i][i]=1;
  e.n=e.m=n;
  return e;
}

matrix power(matrix a,int k){
  matrix s=e(a.n);
  for (;k;k>>=1,a=a*a)
    if (k&1) s=s*a;
  return s;
}

matrix Calc(matrix a,int k){
  if (k==1) return a;
  matrix ans=Calc(a,k>>1);
  ans=ans+power(a,k>>1)*ans;
  if (k&1) ans=ans+power(a,k);
  return ans; 
}

Abigail into(){
  scanf("%d%d%d",&n,&k,&mod);
  a.n=a.m=n;
  for (int i=1;i<=n;++i)
    for (int j=1;j<=n;++j){
      scanf("%d",&a.v[i][j]);
      a.v[i][j]%=mod;
	}
}

Abigail work(){
  a=Calc(a,k);
}

Abigail outo(){
  for (int i=1;i<=n;++i){
  	for (int j=1;j<n;++j)
  	  printf("%d ",a.v[i][j]);
  	printf("%d\n",a.v[i][n]);
  }
}

int main(){
  into();
  work();
  outo();
  return 0;
}
刘汝佳书籍代码 刘汝佳第二版算法入门代码 立即下载

相关推荐

利用MATLAB 4f光学系统,在Python中进行弗劳恩霍夫衍射和傅里叶面滤波——用镜头模拟光学图像处理。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

POJ - 3233 - Matrix Power Series(矩阵分块 or 分治 + 矩阵快速幂)

题目链接:http://poj.org/problem?id=3233 题意:已知一个n*n的矩阵A,和一个正整数k,求。 分治思路:首先我们知道 可以用矩阵快速幂求出来。其次可以对进行分治,每次将规模减半,如下: :。 : 。 : 。 从上面几个式子可以发现,当k为奇数或者偶数的区别。 对于一个是偶数则:。 如果为奇数的话需要加上也就是:。 #...

sugarbliss 769

工业互联网工控安全与工业质检AI大模型建设方案.pptx

工业互联网工控安全与工业质检AI大模型建设方案.pptx

POJ—3233—Matrix power series—【矩阵快速幂】【二分,递归,分治】

Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 15107   Accepted: 6474 Description Given a n × n matrix A and a positive integer k, fi

ACer-TomatoFish 681

通信行业CentOS 7内核网络栈优化:高并发连接下UDP/TCP性能调优与系统资源管理

内容概要:本文聚焦于CentOS 7系统在通信行业高并发场景下的性能调优实践,重点围绕内核网络栈优化展开,涵盖UDP/TCP缓冲区调整、文件句柄与连接跟踪表扩容、TIME_WAIT状态复用、软中断分布优化及tuned工具的自动化调优。通过具体配置参数和实际案例(如VoIP软交换系统)深入解析各项调优措施的设计原理与实施效果,有效解决高CPS下丢包、连接失败等问题,并展望了向云化、eBPF等动态智能调优方向的发展趋势。; 适合人群:从事通信系统运维、网络开发或Linux系统性能优化的技术人员,具备一定操作系统和网络基础知识,工作经验1年以上的中初级工程师。; 使用场景及目标:①应用于软交换、媒体网关、信令网关等高并发通信设备的系统调优;②解决UDP丢包、conntrack表满、TCP连接队列溢出等典型性能瓶颈;③提升系统在小包高频、低时延要求场景下的稳定性和吞吐能力。; 阅读建议:建议结合实际生产环境或测试平台同步验证文中配置,重点关注参数背后的物理意义(如BDP、softirq、conntrack机制),并配合ss、conntrack、dmesg等命令进行调优前后对比分析,确保安全可控地实施变更。

2024 《计算机网络》实验教学指导书.doc

2024 《计算机网络》实验教学指导书.doc

Matrix Power Series POJ - 3233 矩阵快速幂+分治

一、内容 二、思路 我们规定f(A, k) 这个函数为求A + A2 + A3 … Ak 的值 当k为偶数时: S = A + A2 + A3 … Ak = (A + A1…Ak/2) + (Ak/2+1+…Ak) = (A + A1…Ak/2) +Ak/2(A + A1…Ak/2) = (1 + Ak/2) * (A + A1…Ak/2) = (1 + Ak/2) * f(A, k / ...

Tizzi的博客 945

不平衡电网下自抗扰顺序模型预测PWM整流器控制仿真模型(Simulink仿真实现)

内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,提出了一套融合全局规划、动态避障与局部协同调整的综合路径规划方法。研究内容涵盖基于改进RRT算法与图论的全局路径规划、基于动态风险场和动态窗口法(DWA)的模型预测控制实现动态避障,以及基于分布式协同控制的多无人机局部路径协同策略。通过Matlab平台构建仿真环境,在多种典型城市交通场景下对所提方法进行了系统性验证,结果表明该方法在路径安全性、编队稳定性与任务效率方面表现优异。文章还深入探讨了算法的创新点与未来研究方向,为复杂城市环境下多无人机系统的自主协同提供了理论支撑与技术路径。; 适合人群:具备自动化、控制理论、计算机科学或相关领域基础知识,从事无人机系统、智能交通、路径规划、多智能体协同控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为城市空中交通系统中的多无人机安全、高效飞行提供可靠的路径规划解决方案;②支持在复杂、动态的城市场景中开展无人机自主导航、编队飞行与协同控制的技术研究与仿真验证。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法的具体实现细节、参数配置对性能的影响以及不同仿真场景下的实验设计,以深入理解各模块的集成逻辑与实际应用效果。

Matrix Power Series(poj3233快速幂+矩阵二分幂+分治)

题意:给定一个n*n的矩阵和一个整数k,计算 S = A +A^2 +A^3 + .....+ A^k 思路:不能暴力,会超时的所以我们要想一个办法化简,对于原式可以提取公因式  S = A +A^2 +A^3 + .....+ A^k/2 + A^k/2 * (A +A^2 +A^3 + .....+ A^k/2) 这样我们就可以只算A到A^k/2,同理这之间也可以用刚才的方法不停地二

leonharetd的专栏 900

步科触摸屏编程

1.首先官网上下载kinco软件,然后再安装驱动,安装的方式是需要两个文件。把两个文件放到driver文件夹下面,然后设备管理器右键更新,手选driver文件夹,自动安装即可。 步科触摸屏驱动文件下载地址 2.按照步科触摸屏使用手册一步一步来建立工程 Kinco HMIware使用手册下载地址 登录界面 涉及到的是页面切换,用的是login window,然后只留下等级输入那个

MAYBE的博客 2万+

射频总集篇:(不断更新)

射频每一章涉及到的重点理论/设计方法 CHAPTER 1 传输线理论 输入阻抗Zin,负载阻抗ZL,驻波比ρ,反射系数 CHAPTER 2 波导 矩形波导,圆波导,同轴线 CHAPTER 3 微型带状传输线 微带线的参数设计,带状线的参数设计 CHAPTER 4 ...

jieyannn的博客 1919

刘汝佳蓝书后缀数组模板解释及补全

相信很多初学后缀数组的ACMer在学习蓝书中的后缀数组部分遇到了一些障碍,可能像我一样看明白了P219 ——220的讲解和算法,百度了基数排序的方法,然后被卡在P221的代码上了,本文目的即分享我对这段代码的理解。       首先明确其中每个变量的含义,n为字符串s的长度,m为字符串中可能包含的最大字符值+1(故一开始应置为'z' + 1),sa数组存的是P220四幅图中每一幅结束时最下面的最

jijijix的博客 3401

理解ADC:为什么需要抗混叠滤波器?

本文介绍 ADC 的混叠现象,引出抗混叠滤波器,并介绍一种开关电容滤波器,它具有很小的增益过渡带。

疯狂的运放 5935

算法竞赛入门经典(第2版)-刘汝佳-解题源码说明

更新频率、写作思路、代码方面

好好学习,天天向上 1879

同步整流buck电路图设计:手把手入门必看

从零开始拆解同步整流Buck电路图及其原理,手把手带你画出关键拓扑、选型MOSFET、分析续流路径。重点讲清占空比控制逻辑与体二极管导通损耗的规避方法,让buck电路图及其原理真正落地可调、稳定可靠。

weixin_33308579的博客 995

Red Hat Enterprise Linux 9.2

安装Red Hat Enterprise Linux 9.2

zhurobert的博客 938

刘汝佳 代码仓库 https://github.com/aoapc-book/aoapc-bac2nd/tree/master/ch9

https://github.com/aoapc-book/aoapc-bac2nd/tree/master/ch9

qq_27151549的博客 3687

图像处理基础 || (一) python 读取图像的常用方式

图像的读取与保存是图像处理或计算机视觉领域中最基本的操作,python中有众多的库支持图像的读取、显示与存储,常用的库包括 matplotlib、skimage 和 Pillow 库。

weixin_40234309的博客 5683

蓝书(算法竞赛进阶指南)刷题记录——BZOJ2351 Matrix(hash)

题目:BZOJ2351. 题目大意:给定一个NM的大01矩阵,以及Q个AB的小01矩阵,问有每个小矩阵是否在大矩阵中出现. 看到这道题我们就会想到考虑这个问题在一维情况下的做法,直接什么AC自动机,什么KMP之类的算法都可以解决. 但是考虑在二维情况下怎么办?二维AC自动机 矩阵hash! 我们考虑字符串hash是把一个字符串看成一个P进制数,那么矩阵hash呢?考虑先把矩阵的每一行看成一个P1进...

hzk_cpp的博客 504

CMOS Sensor的调试经验分享

我这里要介绍的就是CMOS摄像头的一些调试经验。 首先,要认识CMOS摄像头的结构。我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头、感应器和图像信号处理器构成。一般情况下,集成好的模组我们只看到外面的镜头、接口和封装壳,这种一般是固定焦距的。有些厂商只提供芯片,需要自己安装镜头,镜头要选择合适大小的镜头,如果没有夜视要求的话,最好选择带有红外滤光的镜头,因为一般的sensor都...

camerall 3761

pb插入ole控件点击insert+control时自动关闭解决办法

也就是说pb搜索CLSID的子项保存在OLE Object Bitmaps中,当搜索CLSID中的DLL或OCX控件和PB有冲突时,CLSID后面的DLL、OCX控件就不会保存在OLE Object Bitmaps中,也就是说OLE Object Bitmaps没有完全加载所有控件,有的控件冲突导致中断使PB报错,找出冲突的控件是关键。进行对出问题的控件反注册,如果提示反注册成功,打开PB的OLE控件看是否报错,如果还报错返回步骤(三)循环查找。,再进入注册表看到的是最正确的。来注册会莫名的冲突,但是用。

悠闲饭团的博客 710

刘汝佳代码仓库网址

点击打开链接 转载于:https://www.cnblogs.com/sugewud/p/9819601.html

weixin_33692284的博客 418

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

POJ 3070 Fibonacci (算法竞赛进阶指南,矩阵乘法)

算法竞赛进阶指南,156页,矩阵乘法 本题要点: 1、 n <= 2 * 10^9, 如果使用迭代法计算 斐波那契数列,显然会超时。 2、 题目给出了提示, 2 * 2 阶矩阵(假设叫特殊矩阵) 的n次方,得到的矩阵,就是 fib[n], fib[n - 1], f[n - 1], f[n - 2] 当然计算矩阵的n次方,不能一个一个的成,那样时间复杂度也是 O(n). 应该使用二进制的方法,扫描 n 值得二进制的每一位,看看是不是1, 用矩阵B 来存放 特殊矩阵 的 2, 4, 8, 16 次方,…

qq_38232157的博客 254

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

POJ3233 Matrix Power Series(矩阵快速幂+分治)

Description Given an×nmatrixAand a positive integerk, find the sumS=A+A2+A3+ … +Ak. Input The input contains exactly one test case. The first line of input contains three...

weixin_30333885的博客 174

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

POJ 3233 Matrix Power Series(矩阵乘法+分治/矩阵加速递推/倍增)

POJ 3233 矩阵乘法+分治/矩阵加速递推/倍增 分治: sum=A1+A2+...+Ak&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=A1+A2+...+Ak/2+Ak/2+1+...+Ak&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbs

wang_zitao的博客 356
上一篇: 【NOI2014】BZOJ3670动物园题解(KMP算法)
下一篇: 蓝书(算法竞赛进阶指南)刷题记录——POJ2947 Widget Factory(带模高斯消元)
hezlik
博客等级 码龄9年 111粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值