2013 多校第九场 hdu 4686 Arc of Dream(矩阵乘法或者直接推公式)
来源:互联网 发布:服务器交换机端口号 编辑:程序博客网 时间:2024/05/16 09:25
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4686
题目大意:就是让你算这个式子:
告诉你A0、B0、AX、AY、BX、BY
a0 = A0,ai = ai-1*AX+AY
b0 = B0
bi = bi-1*BX+BY。
思路:构造矩阵 [sn ,f(n+1),an,bn,1],再构造一个右乘矩阵:
[1,0,0,0,0]
[1,AXBX,0,0,0]
[0,AXBY,AX,0,0]
[0,AYBX,0,BX,0]
[0,AYBY,AY,BY,1]
右乘矩阵很好构造的,只要把 ai*bi 化开来就好了。
代码如下:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef __int64 lld;const int MOD = 1e9+7;struct Matrix{ int hang,lie; int num[5][5]; Matrix operator * (Matrix tmp) { Matrix ans; memset(ans.num,0,sizeof(ans.num)); ans.hang = hang,ans.lie = tmp.lie; for(int k = 0;k<lie;k++) for(int i = 0;i<hang;i++) if(num[i][k]) for(int j = 0;j<lie;j++) if(tmp.num[k][j]) ans.num[i][j] = (ans.num[i][j] + (lld)num[i][k]*tmp.num[k][j]%MOD)%MOD; return ans; }} ;Matrix quick_mod(Matrix a,lld k){ Matrix unit; unit.hang = unit.lie = 5; for(int i = 0;i<unit.hang;i++) for(int j = 0;j<unit.lie;j++) unit.num[i][j] = (i==j); while(k) { if(k&1) unit = unit*a; a = a*a; k>>=1; } return unit;}int main(){ lld n; while(~scanf("%I64d",&n)) { int a0,ax,ay,b0,bx,by; scanf("%d%d%d%d%d%d",&a0,&ax,&ay,&b0,&bx,&by); Matrix ret; ret.hang = 1; ret.lie = 5; ret.num[0][0] = 0,ret.num[0][1] = (lld)a0*b0%MOD,ret.num[0][2] = a0,ret.num[0][3] = b0,ret.num[0][4] = 1; Matrix a; a.hang = a.lie = 5; memset(a.num,0,sizeof(a.num)); a.num[0][0] = 1; a.num[1][0] = 1,a.num[1][1] = (lld)ax*bx%MOD; a.num[2][1] = (lld)ax*by%MOD;a.num[2][2] = ax; a.num[3][1] = (lld)ay*bx%MOD;a.num[3][3] = bx; a.num[4][1] = (lld)ay*by%MOD;a.num[4][2] = ay;a.num[4][3] = by;a.num[4][4] = 1; ret = ret*quick_mod(a,n); printf("%d\n",ret.num[0][0]); } return 0;}
- 2013 多校第九场 hdu 4686 Arc of Dream(矩阵乘法或者直接推公式)
- hdu 4686 Arc of Dream 多校第九场
- hdu 4686Arc of Dream 杭电多校第九场1001 矩阵
- HDU-4686 Arc of Dream(推公式+矩阵快速幂)
- HDU 4686 Arc of Dream(矩阵加速递推)
- 多校联合第九场1001HDU4686 Arc of Dream
- hdu-4686-Arc of Dream-矩阵
- hdu 4686 Arc of Dream(构造矩阵快速幂)
- hdu 4686 Arc of Dream(矩阵快速幂)
- HDU 4686 Arc of Dream(矩阵快速幂)
- HDU 4686 Arc of Dream(矩阵快速幂)
- HDU 4686 Arc of Dream(矩阵快速幂)
- hdu 4686 Arc of Dream(矩阵快速幂)
- HDU 4686 Arc of Dream(构造矩阵)
- HDU 4686 Arc of Dream(矩阵快速幂)
- HDU 4686 Arc of Dream(矩阵快速幂)
- HDU 4686 Arc of Dream(矩阵快速幂!)
- HDU 4686 Arc of Dream(构造矩阵 快速幂)
- T-SQL查询进阶--变量
- CV
- pdf介绍及pdf相关软件(内容来自百度百科)
- C#获取执行程序所在的当前路径的方法
- 求栈的最小元素
- 2013 多校第九场 hdu 4686 Arc of Dream(矩阵乘法或者直接推公式)
- ubuntu安装中文输入法
- EditText 总结
- IDA 断点设置里,地址前得加上0x
- hdu 3466 Proud Merchants(DP)
- va_list可变参数原理及vsprintf函数
- Codility上的问题 (16) Omicron 2012
- ios 制作 framework小结
- opencv帮我看看怎么这样呢,轮廓无法读出来