【题解】Luogu P5175 数列

news/2026/1/14 2:30:05/文章来源:https://www.cnblogs.com/Seqfrel/p/19343952

题目大意

给定一个递推式 \(a_n=x \times a_{n-1}+ y \times a_{n-2}(n≥3)\),求 \(\sum_{i=1}^na_i^2\)

解题思路

递推通常是 \(O(n)\) 解法,但是本题 \(1 \le n \le 10^{18}\)\(T=30000\)(注意是等于),所以一定会超时。这里就要用到矩阵快速幂进行优化。

定义 \(f(n)\) 表示 \(a_n\)\(s(n)\) 表示 \(\sum_{i=1}^na_i^2\),则可以根据完全平方公式写出递推式:

\(f(n)=xf(n-1)+yf(n-2)\)

\(f(n)^2=(xf(n-1)+yf(n-2))=x^2f(n-1)^2+y^2f(n-2)^2+2xyf(n-1)f(n-2)\)

\(f(n)f(n-1)=xf(n-1)^2+yf(n-1)f(n-2)\)

\(s(n)=s(n-1)+f(n)^2\)

接下来我们构造状态矩阵。我们发现求 \(s(n)\) 需要用到四个值:\(s(n-1)\)\(f(n-1)^2\)\(f(n-2)^2\)\(f(n-1)f(n-2)\),所以我们构造两个状态矩阵:

\[\begin{bmatrix} s(n) & f(n)^2 & f(n-1)^2 & f(n)f(n-1) \end{bmatrix} = \begin{bmatrix} s(n-1) & f(n-1)^2 & f(n-2)^2 & f(n-1)f(n-2) \end{bmatrix} \times A \]

而这个 \(A\) 矩阵就是我们要求的转移矩阵。要想求 \(A\) 矩阵,我们先将第一个矩阵的每一项带入刚才求得的递推式来求用第二个矩阵的全部项求第一个矩阵的那一项所需要乘的系数,也就是如何转移:

第一项

\(s(n)=s(n-1) \times 1 + f(n-1)^2 \times x^2 + f(n-2)^2 \times y^2 + f(n-1)f(n-2) \times 2xy\)

第二项

\(f(n)^2=s(n-1) \times 0 + f(n-1)^2 \times x^2 + f(n-2)^2 \times y^2 + f(n-1)f(n-2) \times 2xy\)

第三项

\(f(n-1)^2=s(n-1) \times 0 + f(n-1)^2 \times 1 + f(n-2)^2 \times 0 + f(n-1)f(n-2) \times 0\)

第四项

\(f(n)f(n-1)=s(n-1) \times 0 + f(n-1)^2 \times x + f(n-2)^2 \times 0 + f(n-1)f(n-2) \times y\)

那么我们把这些系数按矩阵乘法的运算方式一列一列填进矩阵 \(A\) 里,就求出了 \(A\)

\[A=\begin{bmatrix} 1 & 0 & 0 & 0 \\ x^2 & x^2 & 1 & x \\ y^2 & y^2 & 0 & 0 \\ 2xy & 2xy & 0 & y \end{bmatrix} \]

因为 \(n=1\)\(n=2\) 时的矩阵是需要单独求的,所以最终的式子是:

\[\begin{bmatrix} s(n) & f(n)^2 & f(n-1)^2 & f(n)f(n-1) \end{bmatrix} = \begin{bmatrix} s(2) & f(2)^2 & f(1)^2 & f(2)f(1) \end{bmatrix} \times \begin{bmatrix} 1 & 0 & 0 & 0 \\ x^2 & x^2 & 1 & x \\ y^2 & y^2 & 0 & 0 \\ 2xy & 2xy & 0 & y \end{bmatrix}^{n-2} \]

然后套矩阵快速幂的板子即可。

代码实现

#include<iostream>
#include<cstdio>
#include<cstring>
#define int long long //这里图方便就这样写了。平时不建议这样写。
using namespace std;
const int p=1e9+7; //要取模的数。
struct Matrix{ //矩阵。int mx[5][5];
}a,s,c;
int T,n,k,f1,f2,x,y;
Matrix operator *(const Matrix &a,const Matrix &b){ //乘法运算符重载为矩阵乘法。注意它只会对指定的结构体生效。memset(c.mx,0,sizeof(c.mx));for(int i=1;i<=4;i++){for(int j=1;j<=4;j++){for(int d=1;d<=4;d++){c.mx[i][j]=(c.mx[i][j]%p+(a.mx[i][d]*b.mx[d][j])%p)%p;}}}return c;
}
signed main(){cin>>T;while(T--){memset(s.mx,0,sizeof(s.mx)); //清空矩阵。memset(a.mx,0,sizeof(a.mx));scanf("%lld%lld%lld%lld%lld",&n,&f1,&f2,&x,&y);f1%=p;f2%=p;x%=p;y%=p;for(int i=1;i<=4;i++) s.mx[i][i]=1; //初始化矩阵。s是单位矩阵,a是转移矩阵。a.mx[1][1]=a.mx[2][3]=1;a.mx[2][1]=a.mx[2][2]=x*x%p;a.mx[3][1]=a.mx[3][2]=y*y%p;a.mx[4][1]=a.mx[4][2]=2*x*y%p;a.mx[2][4]=x;a.mx[4][4]=y;if(n==1) printf("%lld\n",(f1*f1)%p); //特殊情况的判定。else if(n==2) printf("%lld\n",(f1*f1%p+f2*f2%p)%p);else{int s2=(f1*f1%p+f2*f2%p)%p; //求出n=2时的矩阵。int f22=(f2*f2)%p;int f11=(f1*f1)%p;int f12=(f1*f2)%p;n-=2;while(n){if(n&1) s=s*a;a=a*a;n>>=1;}printf("%lld\n",(((s2*s.mx[1][1])%p+(f22*s.mx[2][1]))%p+((f11*s.mx[3][1])%p+(f12*s.mx[4][1])%p)%p)%p);}}return 0;
}

时间复杂度为 \(O(T\log n \times m^3)\)\(m\) 为矩阵边长也就是 \(4\)

注意事项

  • 记得开 long long
  • 记得随时取模。
  • 记得不要取模 \(n\)(我在这里卡了很长时间,绷)。
  • 记得输出一般情况时乘上 \(n=2\) 时的状态矩阵。
  • 常数时间复杂度较高,需要卡常。比如:如果用 memset 清空的话矩阵不要开太大、使用 scanfprintf 进行输入输出(或快读)等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1004949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入Ascend C:华为昇腾AI芯片的高性能编程语言详解

引言 随着人工智能技术的迅猛发展&#xff0c;专用AI加速芯片逐渐成为推动大模型训练与推理的核心硬件。在这一背景下&#xff0c;华为推出的昇腾&#xff08;Ascend&#xff09;系列AI处理器凭借其高能效比、大规模并行计算能力以及完整的软硬件生态体系&#xff0c;迅速在全…

SpringBoot 企业级接口加密【通用、可配置、解耦的组件】「开闭原则+模板方法+拦截器/中间件模式」

将加解密逻辑封装成通用、可配置、解耦的组件&#xff0c;核心是遵循「开闭原则模板方法拦截器/中间件模式」&#xff0c;让业务代码无需嵌入加密逻辑&#xff0c;仅通过注解/配置指定需要加密的接口/字段即可。以下是落地方案&#xff0c;以Java Spring Boot&#xff08;主流企…

论文AI率90%→5%!DeepSeek四大降ai率指令+3款神器实测(保姆级教程)

从高校毕业论文到期刊审稿&#xff0c;2025年的AIGC检测已经成为了所有人的“噩梦”。很多同学拿着DeepSeek或GPT生成的论文去查&#xff0c;AI率直接飙红到90%。 别焦虑&#xff01;作为一个刚把AI率打下来的过来人&#xff0c;我发现&#xff1a;AI的痕迹其实是有迹可循的。…

【笔记】ST 表

求区间最值:RMQ问题。 用ST表求解。递推公式:\(K=(\log (R-L+1) \div \log (2))\) 直接在 cmath 中调用,cmath 中是以 \(10\) 为底,所以用到以上换底公式。也可以预处理 \(\log\) 优化常数复杂度。 log[i]=log[i/2…

05_C 语言进阶之避坑指南:编译器优化等级 —— 嵌入式开发中被忽略的 “隐形陷阱”

C 语言进阶之避坑指南:编译器优化等级 —— 嵌入式开发中被忽略的 “隐形陷阱” 一、编译器优化等级的 “坑”,你踩过吗? “代码在 O0 调试模式下运行正常,切换到 O2 优化后直接卡死?” “全局变量在优化后被编译器‘吃掉’,中断中修改的值主循环读不到?” “调试时…

从一维到二维:用Spire.XLS轻松将Python列表导出到Excel

在数据驱动的时代&#xff0c;Python已成为数据处理领域的瑞士军刀。然而&#xff0c;当我们处理大量数据时&#xff0c;如何将Python中结构化的List数据高效、准确地写入到Excel文件中&#xff0c;常常成为开发者面临的一个挑战。传统的文本文件输出或手动复制粘贴不仅效率低下…

Flutter Bloc 状态管理深度解析与开源鸿蒙 ArkUI 对标分析

文章目录Flutter Bloc 状态管理深度解析与开源鸿蒙 ArkUI 对标分析引言一、Flutter Bloc 核心原理与架构设计1.1 Bloc 设计理念1.2 Bloc 核心组件与依赖二、Flutter Bloc 实战开发&#xff1a;实现一个天气查询应用2.1 步骤1&#xff1a;定义 Event 与 State2.2 步骤2&#xff…

【笔记】矩阵快速幂

矩阵快速幂 矩阵乘法 + 快速幂 矩阵加法: 定义矩阵 \(C=A+B\)。 \(C_{i,j}=A_{i,j}+B_{i,j}\)。 矩阵乘法: 计算两个矩阵的乘法。\(n \times m\) 阶的矩阵 \(A\) 乘以 \(m \times k\) 阶的矩阵 \(B\) 得到的矩阵 \(C…

2026中专生不想做客服,如何提升自己?

&#x1fae7;毕业季来临&#xff0c;不少中专生发现自己的求职列表里&#xff0c;客服岗占了大半——重复的接线应答、琐碎的投诉处理、有限的薪资涨幅&#xff0c;再加上狭窄的晋升空间&#xff0c;让很多人望而却步。关键在于跳出“低门槛、高重复”的客服赛道&#xff0c;打…

【笔记】最近公共祖先 - 倍增

最近公共祖先(LCA) Luogu P3379【模板】最近公共祖先(LCA) 倍增能在 \(\log(n)\) 解决从 \(u\) 到 \(v\) 的路线问题。 我们往上跳,\(f[i][j]\) 表示 \(i\) 节点往上跳 \(2^j\) 步。 \(f[i][0]=father[i]\) \(f[i…

2026大专建筑工程必看!这些证书让你找工作不踩雷!

各位建工专业的同学们&#xff0c;2026年的建筑行业正在经历深刻转型。“大干快上”的时代过去了&#xff0c;现在是拼技术、拼管理、拼合规的时代。作为大专生&#xff0c;我们学历上不占优&#xff0c;但恰恰可以通过实操技能和专业证书&#xff0c;在施工现场打出一片天。今…

这的确很棒

电脑课自由:https://blog.csdn.net/gitblog_00491/article/details/153757144

【笔记】龟速乘与快速幂

龟速乘与快速幂 n&1: 取n的二进制最末位 n>>1: 右移一位,相当于去掉n的二进制最末尾(相当于n/2) n<<1 相当于n*2 if(n%2==1) 可以写成if((n&1)==1)或if(n&1) 位运算比 +-*/ 更快龟速乘 求 …

2025 最新家电维修平台 TOP5 评测!优质家电维修服务商榜单发布,数智化赋能 + 全城覆盖,品质服务重构家庭生活体验 - 全局中转站

随着居民对品质生活需求的提升,家电维修与家政服务已成为家庭生活的刚需。本榜单基于服务覆盖广度、工程师专业度、响应时效、用户满意度四大维度,结合行业服务标准与真实用户反馈,权威解析2025年五大优质服务平台综…

GitLab与DeepSeek协同实现MR自动评审实践指南

GitLab与DeepSeek协同实现MR自动评审实践指南摘要本文详细探讨如何利用GitLab的CI/CD能力与DeepSeek智能引擎相结合&#xff0c;构建自动化代码评审系统。该系统能够在合并请求&#xff08;MR&#xff09;提交时自动执行代码质量分析&#xff0c;生成结构化评审报告并提出优化建…

2025最新家电安装平台TOP5评测!优质家电服务公司深度解析,安装数智化赋能+全国覆盖权威榜单发布,重构家居服务生态 - 全局中转站

随着人们对居家生活品质要求的不断提升,专业、高效的家电安装及相关家居服务成为家庭生活不可或缺的一部分。本榜单基于服务覆盖范围、专业团队素养、技术创新能力、用户口碑反馈四大维度,结合行业大数据及用户实际体…

CF 口胡记录

这里的蓝题。 CF1290B 性质分析,构造 CF1517D 性质分析,DP CF1553E 分析范围,计算交换次数的 trick CF1406D 分析,差分 CF1322B 按位考虑,从结果出发考虑条件范围,双指针 CF1498E 竞赛图上找 scc,套路性质。 CF…

产品经理资源合集

【163课堂-1000075010】微专业 - 极客班产品经理 - 带源码课件 文件大小: 32.5GB内容特色: 极客班微专业体系&#xff0c;32.5GB源码课件全链路拆解适用人群: 想转行/进阶的产品经理、创业者、互联网业务人员核心价值: 从需求到上线&#xff0c;学完即可独立操刀产品并交付代码…

node基础

从node文档里抄了一些东西贴出来&#xff0c;省的每次都找好久&#xff08;node文档的那个目录&#xff0c;我感觉找东西挺费劲的&#xff09; &#xff08;ps:为什么node v25版本的文档里找不到path模块&#xff0c;v24版本的文档里找到了&#xff01;&#xff01;&#xff01…

行测教程资源合集

归墟行测 文件大小: 9.9GB内容特色: 9.9GB行测全套题库视频精讲&#xff0c;夸克秒下适用人群: 国考、省考、事业单位备考者核心价值: 刷题模考解析一站式&#xff0c;提分快下载链接: https://pan.quark.cn/s/201aaf99d2e4 半月谈付费行测申论资料 文件大小: 57.6GB内容特色…