构造矩阵如下:
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. NET Core全新的开发体验

    NET Core全新的开发体验 2016年6月27日,这是一个特殊的日子,微软全新的.NET开发平台.NET Core的RTM版本正式发布.我个人将.NET Core的核心特性归结为三点,它们的首字母 ...

  2. Winsock在Windows下的编程教程(C语言)(图文并茂,超长教程)

    https://www.0xaa55.com/forum.php?mod=viewthread&tid=378&extra=page%3D2

  3. 【引用】Linux 内核驱动--多点触摸接口

    本文转载自James<Linux 内核驱动--多点触摸接口>   译自:linux-2.6.31.14\Documentation\input\multi-touch-protocol.t ...

  4. 【C#、csharp】HTTPGET,POST请求

    HTTP定义了与服务器交互的不同方法,基本方法有GET,POST,PUT,DELETE,分别对于查,该,增,删.一般情况下我们只用到GET和POST,其他两种都也可以用GET和POST来实现,很多浏览 ...

  5. nginx sendfile tcp_nopush tcp_nodelay参数解释

    sendfile 现在流行的web 服务器里面都提供 sendfile 选项用来提高服务器性能,那到底 sendfile是什么,怎么影响性能的呢?sendfile实际上是 Linux2.0+以后的推出 ...

  6. Win8.1应用开发之异步编程

    在win8应用商店开发时,我们会遇到很多异步方法.它们存在的目的就是为了确保你的应用在运行须要大量时间的任务时仍能保持良好的响应,也就是说调用异步API是为了响应用户的操作.设想一下我们点击一个But ...

  7. 09-IOSCore - 应用互动、UIImagePickerController

    一.调用系统程序/服务 1. 应用互动数据权限 1) 跟自己本地数据交互 2) 跟网络服务器/云数据交互 3) 跟系统数据服务交互 4) 跟其它应用程序交互 2. 基础 URL 统一资源定位 一个特殊 ...

  8. 为开发用途mac电脑瘦身

    本文介绍的瘦身方法仅仅针对开发用途的mac电脑,在我们的开发过程中会发现随着编译的程序过多非常导致硬盘空间的占用率不断上升. 原文地址:http://blog.csdn.net/qqmcy/artic ...

  9. Flex中怎么给表格中的滚动栏定位

    1.问题背景 假设表格中的字段过多,会出现滚动栏,在将滚动栏滚到一定的位置时,又一次刷新表格.滚动栏会回到原处,原来查看的字段还得继续滚动,才干查看到. 2.实现实例 <? xml versio ...

  10. Spring整合Hibernate的步骤

    为什么要整合Hibernate?1.使用Spring的IOC功能管理SessionFactory对象 LocalSessionFactoryBean2.使用Spring管理Session对象  Hib ...