构造矩阵如下:
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. Clojure学习03:数据结构(集合)

    Clojure提供了几种强大的数据结构(集合) 一.集合种类 1.vector 相当于数组,如: [2  3   5]  ,  ["ad"  "adas"  & ...

  2. Android学习笔记:如何高效显示图片,避免内存溢出 和 ImageView无法显示大尺寸的图片

    因为手机的内存资源是有限的,每个app可使用的内存是受限的.而现在采用高分辨率拍的照片往往很大.如果加载时不注意方法,很有可能会引起java.lang.OutofMemoryError: bitmap ...

  3. oschina娱乐游戏

    休闲游戏 123网络游戏 88单机游戏 201游戏模拟器/工具/引擎

  4. 基于visual Studio2013解决C语言竞赛题之0505选数

     题目

  5. 安装虚拟机时出现The Microsoft Runtime DLL

    参考文档: http://zhidao.baidu.com/link?url=1E4vr6ToPGm_kAZw4voOqzrPtzGaSIqy3kvcGXehs3KJAkirNKOHJbrsxec3f ...

  6. Android上成功实现了蓝牙的一些Profile

    前段时间做蓝牙方面的开发,Google的Android只实现了Handset/Handfree和A2DP/AVRCP等Profile,而其 它常用的Profile如HID/DUN/SPP/OPP/FT ...

  7. linux指令(目录类操作指令)

    pwd 显示当前所在的工作目录 cd 目标目录    例如cd  /boot/grub 从当前目录切换到某个目录 cd  切换到根目录 cd.. 切换到当前目录的上层目录 ls  显示当前目录下的内容 ...

  8. FireMonkey下的异形窗体拖动(句柄转换)

    DelphiXE2 Firemoney FMX 的窗体不只是为windows的, 所以很多功能都没有了. 最常见的就是拖拽了 先看 VCL时代 一个经典拖动代码 ReleaseCapture(); S ...

  9. scrapy新浪天气

    一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序: LX终端(LXTermin ...

  10. bzoj 1901: Zju2112 Dynamic Rankings(树套树)

    1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过 ...