HDUOJ 4686 Arc of Dream

Problem Description

An Arc of Dream is a curve defined by following function:

where
a0=A0a_0 = A_0a0​=A0​
ai=ai−1∗AX+AYa_i = a_{i-1}*A_X+A_Yai​=ai−1​∗AX​+AY​
b0=B0b_0 = B_0b0​=B0​
bi=bi−1∗BX+BYb_i = b_{i-1}*B_X+B_Ybi​=bi−1​∗BX​+BY​
What is the value of AoD(N) modulo 1,000,000,007?

Input

There are multiple test cases. Process to the End of File.
Each test case contains 7 nonnegative integers as follows:
N
A0 AX AY
B0 BX BY
N is no more than 1018, and all the other integers are no more than 2×109.

Output

For each test case, output AoD(N) modulo 1,000,000,007.

Sample Input

1
1 2 3
4 5 6
2
1 2 3
4 5 6
3
1 2 3
4 5 6

Sample Output

4
134
1902

题目其实不难,简单推理一下即可:
Ai−1=a0b0+a1b1+⋯+ai−2bi−2A_{i-1}=a_0b_0+a_1b_1+\cdots+a_{i-2}b_{i-2}Ai−1​=a0​b0​+a1​b1​+⋯+ai−2​bi−2​
Ai=a0b0+a1b1+⋯+ai−2bi−2+ai−1bi−1A_i=a_0b_0+a_1b_1+\cdots+a_{i-2}b_{i-2}+a_{i-1}b_{i-1}Ai​=a0​b0​+a1​b1​+⋯+ai−2​bi−2​+ai−1​bi−1​
=Ai−1+ai−1bi−1\ \ \ \ \ =A_{i-1}+a_{i-1}b_{i-1}     =Ai−1​+ai−1​bi−1​
=Ai−1+(AXai−2+AY)(BXbi−2+BY)\ \ \ \ \ =A_{i-1}+(A_Xa_{i-2}+A_Y)(B_Xb_{i-2}+B_Y)     =Ai−1​+(AX​ai−2​+AY​)(BX​bi−2​+BY​)
=Ai−1+AXBXai−2bi−2+AXBYai−2+AYBXbi−2+AYBY\ \ \ \ \ =A_{i-1}+A_XB_Xa_{i-2}b_{i-2}+A_XB_Ya_{i-2}+A_YB_Xb_{i-2}+A_YB_Y     =Ai−1​+AX​BX​ai−2​bi−2​+AX​BY​ai−2​+AY​BX​bi−2​+AY​BY​
那么递推矩阵就出来了:
[Aiai−1bi−1ai−1bi−11]=[1AXBXAXBYAYBXAYBY0AXBXAXBYAYBXAYBY00AX0AY000BXBY00001][Ai−1ai−2bi−2ai−2bi−21]\left[ \begin{matrix} A_i\\ a_{i-1}b_{i-1}\\ a_{i-1}\\ b_{i-1}\\ 1\\ \end{matrix} \right]= \left[ \begin{matrix} 1&A_XB_X&A_XB_Y&A_YB_X&A_YB_Y\\ 0&A_XB_X&A_XB_Y&A_YB_X&A_YB_Y\\ 0&0&A_X&0&A_Y\\ 0&0&0&B_X&B_Y\\ 0&0&0&0&1\\ \end{matrix} \right]\left[ \begin{matrix} A_{i-1}\\ a_{i-2}b_{i-2}\\ a_{i-2}\\ b_{i-2}\\ 1\\ \end{matrix} \right] ⎣⎢⎢⎢⎢⎡​Ai​ai−1​bi−1​ai−1​bi−1​1​⎦⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎡​10000​AX​BX​AX​BX​000​AX​BY​AX​BY​AX​00​AY​BX​AY​BX​0BX​0​AY​BY​AY​BY​AY​BY​1​⎦⎥⎥⎥⎥⎤​⎣⎢⎢⎢⎢⎡​Ai−1​ai−2​bi−2​ai−2​bi−2​1​⎦⎥⎥⎥⎥⎤​还有两个坑点:
1.n=0n=0n=0 时特判 A0=0A_0=0A0​=0
2.中间过程多取余防爆,我个人是加了快速乘,不会的就多加几个取模就行了
AC代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll n,k;
struct mat
{ll m[5][5];
}a,ans;void init(mat &a){memset(a.m,0,sizeof(a.m));for(int i=0;i<5;i++) a.m[i][i]=1;
}mat mul(mat a,mat b)
{mat c;memset(c.m,0,sizeof(c.m));for(int i=0;i<5;i++){for(int k=0;k<5;k++){if(a.m[i][k]==0) continue;for(int j=0;j<5;j++){c.m[i][j]=(c.m[i][j]+a.m[i][k]%mod*b.m[k][j]%mod)%mod;if(c.m[i][j]<0) c.m[i][j]+=mod;}}}return c;
}mat mat_pow(mat a,ll k)
{mat ans;init(ans);while(k>0){if(k&1) ans=mul(ans,a);a=mul(a,a);k>>=1;}return ans;
}ll f(ll a,ll b)
{ll k=0;while(b){if(b&1) k=(k+a)%mod;a=(a+a)%mod;b>>=1;}return k;
}int main(){while(cin>>n){ll a0,ax,ay,b0,bx,by;cin>>a0>>ax>>ay>>b0>>bx>>by;if(n==0) {puts("0");continue;}memset(a.m,0,sizeof(a.m));memset(ans.m,0,sizeof(ans.m));a.m[0][0]=1,a.m[0][1]=f(ax,bx),a.m[0][2]=f(ax,by),a.m[0][3]=f(ay,bx),a.m[0][4]=f(ay,by);a.m[1][1]=f(ax,bx),a.m[1][2]=f(ax,by),a.m[1][3]=f(ay,bx),a.m[1][4]=f(ay,by);a.m[2][2]=ax%mod,a.m[2][4]=ay%mod;a.m[3][3]=bx%mod,a.m[3][4]=by%mod;a.m[4][4]=1;ans.m[0][0]=f(a0,b0),ans.m[1][0]=f(a0,b0),ans.m[2][0]=a0%mod,ans.m[3][0]=b0%mod,ans.m[4][0]=1;ans=mul(mat_pow(a,n-1),ans);cout<<ans.m[0][0]<<endl;}return 0;
}

HDUOJ 4686 Arc of Dream相关推荐

  1. HDU 4686 Arc of Dream(递归矩阵加速)

    标题效果:你就是给你一程了两个递推公式公式,第一个让你找到n结果项目. 注意需要占用该公式的复发和再构造矩阵. Arc of Dream Time Limit: 2000/2000 MS (Java/ ...

  2. hdu 4686 Arc of Dream

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4686 题目描述: 题目上说的很清楚. 解题思路: 就是递推,用快速幂+构造矩阵解决,因为n的取值范围 ...

  3. HDU - 4686 Arc of Dream(矩阵快速幂,水题)

    题目链接:点击查看 题目大意:给出定义: 现在依次给出n,A0,AX,AY,B0,BX,BY 求Aod的第n项对1e9+7取模后的结果 题目分析: 简单矩阵快速幂 首先化简一下: 初始矩阵:(取n=1 ...

  4. HDU4686 Arc of Dream —— 矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-4686 Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memo ...

  5. 线性代数二之矩阵加速DP——数学作业,Arc of Dream

    矩阵加速 数学作业 description solution code Arc of Dream description solution code 数学作业 description solution ...

  6. [矩阵乘法/快速幂专题]Arc of Dream,Recursive sequence,233 Matrix,Training little cats

    矩阵快速幂习题 复习矩阵乘法及快速幂模板 乘法模板 快速幂模板 T1:Arc of Dream 题目 题解 code T2:Recursive sequence 题目 题解 code T3:233 M ...

  7. hdu-4686 Arc of Dream

    http://acm.hdu.edu.cn/showproblem.php?pid=4686 题意:已知a0,ax,ay  a[i] = ax * a[i-1] + ay; b0,bx,by    b ...

  8. HDU4686——Arc of Dream矩阵快速幂

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4686 题目大意: 已知a0=A0, ai=Ax*ai-1+Ay; b0=B0, bi=Bx*bi-1 ...

  9. 2013 Multi-University Training Contest 9 1011 Arc of Dream

    利用递推关系构建矩阵 然后矩阵快速幂 1 #include<cstdio> 2 #include<cstring> 3 typedef long long LL; 4 cons ...

最新文章

  1. seaborn使用violinplot函数可视化分组小提琴图(Grouped Violinplot with Seaborn violinplot)并保存可视化结果
  2. directx修复工具win7_教你安装双系统,win7+win10
  3. web前端常识之浏览器原理
  4. c++第n小的质数_形形色色的素数 -- 质数定理
  5. linux mv时间,简介Linux中cp和mv搭配{,}在shel_l当中的用法
  6. Apache常见配置及问题
  7. 利用caffe的Python接口生成prototxt文件
  8. oracle rownum的使用
  9. 3dmax2016的破解和安装
  10. 【考研数学】张宇:十月真题做题建议
  11. 我用数据分析,揭开了中国男篮最后的遮羞布
  12. error: fatal error: no input files
  13. 十张图带你看中国交通变迁
  14. CPSE安博会圆满落幕,闪马智能精彩时刻全回顾
  15. 计算机不接受跨专业考研,2016跨专业考研需谨慎的专业解读:计算机
  16. c语言小学生四则运算出题程序
  17. SQL建表语句中 COLLATE Chinese_PRC_CI_AS是何意思?
  18. apache带宽配置
  19. uniapp设置百度小程序索引页dynamicLib、usingComponents、swan-sitemap-list
  20. 有谁了解接口虚拟化?威睿接口虚拟化外有哪些品牌?

热门文章

  1. 【python图像处理】gif动态图的解析与合成
  2. 来了解一下香港公司的离岸豁免-跨境知道
  3. c++day04 友元函数
  4. 关于树叶的活动设计_有关树叶活动方案
  5. 设置元素为浮动后,display的值是多少?
  6. 程序员如何提高10%的效率2
  7. u盘插电脑计算机卡了,U盘连接电脑后出现卡顿怎么回事_U盘连接电脑后电脑非常卡如何处理-win7之家...
  8. 新手入门常见问题--下载第三方库及查看
  9. c语言的调试是对源文件进行,理解C语言——从小菜到大神的晋级之路(3)——C源程序的基本结构与调试方法...
  10. html每打开一次更换一次域名,网站更换域名空间的注意事项