当前位置: 首页 > news >正文

题解:洛谷 P1939 矩阵加速(数列)

题解:洛谷 P1939 矩阵加速(数列)

前置

矩阵知识。

思路

我们设原来的矩阵为

\[\begin{bmatrix} a_n&a_{n-1}&a_{n-2} \end{bmatrix} \]

\(n+1\) 次的矩阵为

\[\begin{bmatrix} a_{n+1}&a_n&a_{n-1} \end{bmatrix} \]

那么,通过题目给的式子

\[a_x= \begin{cases}1 & x \in\{1,2,3\}\\ a_{x-1}+a_{x-3} & x \geq 4 \end{cases} \]

可以求出,原来的矩阵乘上 \( \begin{bmatrix} 1&0&1\\ 1&0&0\\ 0&1&0\\ \end{bmatrix} \)\(n+1\) 次的矩阵。而 \(1 \le n \le 2 \times 10^9\) ,所以要用矩阵快速幕。而又因为原来的矩阵是从 \(n=3\) 开始的,所以 \(n\) 要减 \(3\)

代码

void operator*=(array<ll,3>&a, array<array<ll,3>, 3>b){array<ll,3>c={};for(int i=0;i<3;i++){for(int j=0;j<3;j++){c[i]=(c[i]+ll(a[j])*b[j][i]%mod)%mod;}}a=c;
}
void operator*=(array<array<ll, 3>,3>&a, array<array<ll,3>, 3>b){for(int i=0;i<3;i++){a[i]*=b;}
}
void solve(){ll n;cin>>n;array<ll,3>a={1, 1, 1};array<array<ll, 3>,3>b={1,0,1,1,0,0,0,1,0};n-=3;for(;n>0;n>>=1){if(n&1){a*=b;}b*=b;}cout<<a[0]<<'\n';
}

本文来自 NoiPLE ,转载请注明原文链接:https://www.cnblogs.com/noiple-dequeee/p/19597010

http://www.jsqmd.com/news/362822/

相关文章:

  • 项目集管理软件哪个好?2025年-2026年项目集管理软件推荐与排名,解决跨项目依赖与资源冲突核心痛点 - 品牌推荐
  • 关于 aiohttp 的讲解
  • HanLP,深度详解
  • 类似Confluence的工具哪个好?2025年-2026年类似Confluence的工具推荐与排名,解决数据安全与国产化适配痛点 - 品牌推荐
  • Lab3-page tables MIT6.1810操作系统工程【持续更新】
  • QT button
  • 折扣影票接口,如何对接?
  • Flyway库,深度详解
  • 鸿蒙 HarmonyOS 6 | AI Kit 集成 Core Vision Kit 基础视觉服务
  • 开箱即用的openclaw
  • iOS 开发者必藏!咕噜分发证书检测,让掉签问题彻底远离
  • 零元购”难防?我们用AI行为分析提前预警
  • 飞函:让企业低成本拥有办公“三件套“
  • 智能运维新范式:面向多智能体协作的“小睿助理”
  • BERT,深度详解
  • 电路微分方程与RLC电路的Matlab建模及Simulink仿真绘图
  • Python全栈入门到实战【基础篇 17】循环进阶:推导式大全(列表/字典/集合)
  • 飞函跨平台集成:重新定义企业协作的价值边界
  • 使用C#代码在 PowerPoint 中创建编号或项目符号列表
  • 实践指南:ADR——轻量级架构决策记录机制
  • 细胞力学仿真软件:CellMech_(4).力学环境设置与模拟
  • 2026细胞回输机构优质推荐榜:康景生物、康景生物公司地址、康景生物公司电话、康景生物干细胞治疗、康景细胞公司选择指南 - 优质品牌商家
  • 架构师的核心思维模型:从技术执行者到系统构建者的蜕变指南
  • jsp大学生助学贷款管理系统46g32--程序+源码+数据库+调试部署+开发环境
  • 直播美颜SDK开发详解:如何通过美颜SDK实现稳定、自然的人脸美型效果?
  • Jotai库
  • jsp大学生心理健康咨询系统947j4(程序+源码+数据库+调试部署+开发环境)
  • MobX库,深度详解
  • 实时人脸美型功能开发技术挑战:美颜sdk在性能与效果间的取舍
  • IDEA默认用1.5编译