HDU4686 Arc of Dream 矩阵
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - HDU4686
题意概括
a0 = A0
ai = ai-1*AX+AY
b0 =
B0
bi = bi-1*BX+BY
求AoD(n)
n=0时答案为0!!!!
题解
具体的矩阵构建思路指导可以参考例题链接。
这里仅提供运算过程。
Ai=Ai-1*AX+AY
Bi=Bi-1*BX+BY
AiBi=(Ai-1*AX+AY)(Bi-1*BX+BY)
=AX*BX*Ai-1*Bi-1+AX*BY*Ai-1+BX*AY*Bi-1+AY*BY
Si AiBi Ai Bi K
Si-1 1 0 0 0 0
Ai-1Bi-1 AX*BX AX*BX 0 0 0
Ai-1 AX*BY AX*BY AX 0 0
Bi-1 BX*AY BX*AY 0 BX 0
K AY*BY AY*BY AY BY 1
初始矩阵:
S0 A0B0 A0 B0 K
A0*B0 A0*B0 A0 B0 1
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include <cstring> #include <algorithm> #include <cstdio> #include <cmath> #include <cstdlib> using namespace std; typedef long long LL; const LL mod=1000000007,m=5; LL n,A0,AX,AY,B0,BX,BY; struct Mat{ LL v[m][m]; Mat (){} Mat (LL x){ (* this ).set(x); } void set(LL x){ memset (v,0, sizeof v); if (x==1) for ( int i=0;i<m;i++) v[i][i]=1; } Mat operator * (Mat x){ Mat ans(0); for ( int i=0;i<m;i++) for ( int j=0;j<m;j++) for ( int k=0;k<m;k++) ans.v[i][j]=(ans.v[i][j]+v[i][k]*x.v[k][j])%mod; return ans; } void operator *= (Mat x){ (* this )=(* this )*x; } }M,Md; Mat MatPow(Mat x,LL y){ Mat ans(1),now=x; while (y){ if (y&1LL) ans*=now; now*=now; y>>=1; } return ans; } int main(){ while (~ scanf ( "%lld%lld%lld%lld%lld%lld%lld" ,&n,&A0,&AX,&AY,&B0,&BX,&BY)){ if (!n){ puts ( "0" ); continue ; } A0%=mod,AX%=mod,AY%=mod,B0%=mod,BX%=mod,BY%=mod; LL NewArr[m][m]={{1 ,0 ,0 ,0 ,0}, {AX*BX%mod ,AX*BX%mod ,0 ,0 ,0}, {AX*BY%mod ,AX*BY%mod ,AX ,0 ,0}, {BX*AY%mod ,BX*AY%mod ,0 ,BX ,0}, {AY*BY%mod ,AY*BY%mod ,AY ,BY ,1}}; LL NewArr2[m]= {A0*B0%mod ,A0*B0%mod ,A0 ,B0 ,1}; memcpy (Md.v,NewArr, sizeof NewArr); memcpy (M.v[0],NewArr2, sizeof NewArr2); Md=MatPow(Md,n-1); M*=Md; printf ( "%lld\n" ,M.v[0][0]); } return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 如何打造一个高并发系统?