P5175题解
题意简述
给出数列
题目分析
一看见
题目所求的答案是前
注意到
还没完,注意到
综上,我们使用答案矩阵
为了将其递推到
我们一列一列地进行解释。
对于第
那么对于第
对于第
对于第
现在我们只需要计算出转移矩阵的
需要注意的是要特判 long long
的地方一定要开,不然也会挂。
分析一下时间复杂度。一次矩阵乘法是
代码实现
#include<bits/stdc++.h> using namespace std; const long long mod=1000000007; int t; long long n,x,y,a1,a2; void rd(long long &x) { x=0ll; char c=getchar(); for(;c>'9'||c<'0';c=getchar()); for(;c<='9'&&c>='0';c=getchar()) x=(x<<3ll)+(x<<1ll)+c-'0'; }//long long快读 void rd(int &x) { x=0; char c=getchar(); for(;c>'9'||c<'0';c=getchar()); for(;c<='9'&&c>='0';c=getchar()) x=(x<<3)+(x<<1)+c-'0'; }//int快读 void pt(long long x) { if(x>=10ll) pt(x/10ll); putchar(x%10ll+'0'); }//快写 struct matrix { int n,m; long long a[5][5]; void init(long long k) { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(i!=j) a[i][j]=0ll; else a[i][j]=k; }//初始化 k=0零矩阵,k=1单位矩阵 friend matrix operator *(matrix a,matrix b) { matrix c; c.n=a.n,c.m=a.m; c.init(0ll); for(int i=1;i<=a.n;i++) for(int k=1;k<=a.m;k++) for(int j=1;j<=b.m;j++) c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j]%mod)%mod; return c; }//矩阵乘法 friend matrix operator ^(matrix a,long long b) { matrix res; res.n=res.m=a.n; res.init(1ll); for(;b;b>>=1ll) { if(b&1ll) res=res*a; a=a*a; } return res; }//矩阵快速幂 }ans,trans; int main() { rd(t); while(t--) { rd(n),rd(a1),rd(a2),rd(x),rd(y); if(n==1ll)//特判 n=1,不然会 T 得很惨 { pt(a1*a1%mod); putchar('\n'); continue; } ans.n=1,ans.m=4; ans.a[1][1]=(a2*a2%mod+a1*a1%mod)%mod,ans.a[1][2]=a2*a2%mod,ans.a[1][3]=a1*a1%mod,ans.a[1][4]=a1*a2%mod;//初始化答案矩阵 trans.n=trans.m=4; trans.init(0ll); trans.a[2][1]=trans.a[2][2]=x*x%mod,trans.a[3][1]=trans.a[3][2]=y*y%mod,trans.a[4][1]=trans.a[4][2]=2ll*x*y%mod; trans.a[1][1]=trans.a[2][3]=1ll; trans.a[2][4]=x,trans.a[4][4]=y;//初始化转移矩阵 trans=trans^(n-2ll);//转移矩阵快速幂 ans=ans*trans;//答案矩阵乘上转移矩阵 pt(ans.a[1][1]); putchar('\n'); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下