构造矩阵如下:
Ai*bi AX*BX AX*BY AY*BX AY*BY 0 a(i-1)*b(i-1)
Ai 0 AX 0 AY 0 a(i-1)
Bi 0 0 BX BY 0 b(i-1)
1 0 0 0 1 0 1
Sum(i) AX*BX AX*BY AY*BX AY*BY 1 sum(i-1)
Sum(i) 表示i项和,sum(i)=sum(i-1)+ai*bi;
求第n次的结果,直接对矩阵作n-1次,利用矩阵快速幂,时间复杂度为10*logn~logn
注意取模爆范围和对n=0特判。


#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
typedef unsigned long long ll;
int mod=1000000007;
ll tmp[5][5],a[5][5],b[5][5];
void mul(ll a[][5],ll b[][5])
{
for(int i=0; i<5; i++)
for(int j=0; j<5; j++)
{
tmp[i][j]=0;
for(int k=0; k<5; k++)
{
tmp[i][j]+=(a[i][k]%mod)*(b[k][j]%mod);
tmp[i][j]%=mod;
}
}
memcpy(a,tmp,sizeof(tmp));
}
void pow(ll a[][5],ll b[][5],ll n)
{
memset(a,0,sizeof(a));
for(int i=0; i<5; i++) a[i][i]=1;
while(n)
{
if(n&1) mul(a,b);
mul(b,b);
n>>=1;
}
}
int main()
{
ll a0,ax,ay,b0,bx,by;
ll k;
while(scanf("%I64u",&k)==1)
{
memset(b,0,sizeof(b));
memset(a,0,sizeof(a));
scanf("%I64u%I64u%I64u%I64u%I64u%I64u",&a0,&ax,&ay,&b0,&bx,&by);
if(k==0)
{
printf("0\n");
continue;
}
b[0][0]=((ax%mod)*(bx%mod))%mod;
b[0][1]=((ax%mod)*(by%mod))%mod;
b[0][2]=((ay%mod)*(bx%mod))%mod;
b[0][3]=((ay%mod)*(by%mod))%mod;
b[3][3]=1;
b[1][1]=ax%mod;
b[1][3]=ay%mod;
b[2][2]=bx%mod;
b[2][3]=by%mod;
b[4][0]=((ax%mod)*(bx%mod))%mod;
b[4][1]=((ax%mod)*(by%mod))%mod;
b[4][2]=((ay%mod)*(bx%mod))%mod;
b[4][3]=((ay%mod)*(by%mod))%mod;
b[4][4]=1;
pow(a,b,k-1);
ll ans=0;
ans+=((((a0%mod)*(b0%mod))%mod)*a[4][0])%mod;
ans%=mod;
ans+=((a0%mod)*(a[4][1]%mod))%mod;
ans%=mod;
ans+=((b0%mod)*(a[4][2])%mod)%mod;
ans%=mod;
ans+=(a[4][3])%mod;
ans%=mod;
ans+=(a[4][4]*(a0%mod)*(b0%mod))%mod;
ans%=mod;
printf("%I64u\n",ans%mod);
}
return 0;
}
												

多校 4686 Arc of Dream hdu 矩阵解的更多相关文章

  1. HDU 4686 Arc of Dream (2013多校9 1001 题,矩阵)

    Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

  2. HDU 4686 Arc of Dream (矩阵快速幂)

    Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

  3. hdu 4686 Arc of Dream(矩阵快速幂乘法)

    Problem Description An Arc of Dream is a curve defined by following function: where a0 = A0 ai = ai- ...

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

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

  5. HDU 4686 Arc of Dream(矩阵)

    Arc of Dream [题目链接]Arc of Dream [题目类型]矩阵 &题解: 这题你做的复杂与否很大取决于你建的矩阵是什么样的,膜一发kuangbin大神的矩阵: 还有几个坑点: ...

  6. HDOJ 4686 Arc of Dream 矩阵高速幂

    矩阵高速幂: 依据关系够建矩阵 , 高速幂解决. Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/ ...

  7. HDU 4686 Arc of Dream(矩阵)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4686 题意: 思路: #include <iostream>#include <cs ...

  8. hdu 4686 Arc of Dream(矩阵快速幂)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4686 题意: 其中a0 = A0ai = ai-1*AX+AYb0 = B0bi = bi-1*BX+BY ...

  9. HDU 4686 Arc of Dream 矩阵快速幂,线性同余 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=4686 当看到n为小于64位整数的数字时,就应该有个感觉,acm范畴内这应该是道矩阵快速幂 Ai,Bi的递推式题目 ...

随机推荐

  1. HDU 3923 Invoker 【裸Polya 定理】

    参考了http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove 的模板 对于每一种染色,都有一个等价群,例如旋转, ...

  2. session的简单使用

    前面提到使用httpredirect给用户提交表单之后,防止浏览器back重新提交一次,下面再用session的方法来防止用户这一行为,首先在django中配置session,默认情况下django会 ...

  3. php函数参数

    函数的参数 通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表.参数是从左向右求值的. PHP 支持按值传递参数(默认),通过引用传递参数以及默认参数.也支持可变长度参数列表,更多信息参见 ...

  4. 求知成瘾+逻辑成瘾+博识的无知,你中枪没?我感觉中枪了 - 外野 - Stage1st - Powered by Discuz!

    求知成瘾+逻辑成瘾+博识的无知,你中枪没?我感觉中枪了 - 外野 - Stage1st - Powered by Discuz! 求知成瘾 求知欲似乎是人们的本能,尤其「好学」这个词被定义成天生的褒义 ...

  5. Android 实现在线程中联网

    其实我们要牢记的是,对数据流的操作都是阻塞的,在一般情况下,我们是不需要考虑这个问题的,但是在Android 实现联网的时候,我们必须考虑到这个问题.比如:从网络上下载一张图片: Java代码: pu ...

  6. 嵌入式环境:挂载开发板根NFS文件系统失败

    挂载开发板根NFS文件系统的时候,发现了下面的问题: Looking up port of RPC 100003/2 on 192.168.2.109rpcbind: server 192.168.2 ...

  7. BZOJ 3039: 玉蟾宫( 悬线法 )

    最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...

  8. Python3 正则表达式特殊符号及用法(详细列表) http://bbs.fishc.com/thread-57691-1-1.html (出处: 鱼C论坛)

    http://bbs.fishc.com/thread-57691-1-1.html 留待查询用

  9. 一天一个类,一点也不累 之 Vector

    一天一个类,一点也不累. 今天要说的是ArrayList的亲兄弟--Vector 亲兄弟?看看“族谱” Class Vector<E> java.lang.Object java.util ...

  10. Data Annotation

    Data Annotation 什么是Data Annotation ? 如何使用 ? 自定义Validate Attribute EF  Db first中使用Data Annotation asp ...