hdu 4686 Arc of Dream(矩阵快速幂乘法)
An Arc of Dream is a curve defined by following function:

where
a0 = A0
ai = ai-*AX+AY
b0 = B0
bi = bi-*BX+BY
What is the value of AoD(N) modulo ,,,?
There are multiple test cases. Process to the End of File.
Each test case contains nonnegative integers as follows:
N
A0 AX AY
B0 BX BY
N is no more than , and all the other integers are no more than ×.
For each test case, output AoD(N) modulo ,,,.
因为:a[i]*b[i]=(a[i-1]*AX+AY)*(b[i-1]*BX+BY)
=(a[i-1]*b[i-1]*AX*BX+a[i-1]*AX*BY+b[i-1]*BX*AY+AY*BY)
构造矩阵:
| 1 0 0 0 0 |
| AX*BY AX 0 AX*BY 0 |
{AoD(n-1),a[i-1],b[i-1],a[i-1]*b[i-1],1}* | BX*AY 0 BX BX*AY 0 | ={AoD(n),a[i],b[i],a[i]*b[i],1}
| AX*BX 0 0 AX*BX 0 |
| AY*BY AY BY AY*BY 1 |
另外注意:
if(n==0){//这个判断条件很重要,没有就会超时
printf("0\n");
continue;
}
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<bitset>
#include<map>
#include<vector>
#include<stdlib.h>
#include <stack>
using namespace std;
#define PI acos(-1.0)
#define max(a,b) (a) > (b) ? (a) : (b)
#define min(a,b) (a) < (b) ? (a) : (b)
#define ll long long
#define eps 1e-10
#define MOD 1000000007
#define N 1000000
#define inf 1e12
ll n;
ll A0,Ax,Ay,B0,Bx,By;
struct Matrix{
ll mp[][];
};
Matrix Mul(Matrix a,Matrix b){
Matrix res;
for(ll i=;i<;i++){
for(ll j=;j<;j++){
res.mp[i][j]=;
for(ll k=;k<;k++){
res.mp[i][j]=(res.mp[i][j]+(a.mp[i][k]*b.mp[k][j])%MOD+MOD)%MOD;
}
}
}
return res;
}
Matrix fastm(Matrix a,ll b){
Matrix res;
memset(res.mp,,sizeof(res.mp));
for(ll i=;i<;i++){
res.mp[i][i]=;
}
while(b){
if(b&){
res=Mul(res,a);
}
a=Mul(a,a);
b>>=;
}
return res;
}
int main()
{
while(scanf("%I64d",&n)==){
scanf("%I64d%I64d%I64d%I64d%I64d%I64d",&A0,&Ax,&Ay,&B0,&Bx,&By); if(n==){//这个判断条件很重要,没有就会超时
printf("0\n");
continue;
} ll a0=A0;
ll b0=B0; Matrix tmp;
memset(tmp.mp,,sizeof(tmp.mp));
tmp.mp[][]=%MOD;
tmp.mp[][]=Ax*By%MOD;
tmp.mp[][]=Ax%MOD;
tmp.mp[][]=Ax*By%MOD;
tmp.mp[][]=Bx*Ay%MOD;
tmp.mp[][]=Bx%MOD;
tmp.mp[][]=Bx*Ay%MOD;
tmp.mp[][]=Ax*Bx%MOD;
tmp.mp[][]=Ax*Bx%MOD;
tmp.mp[][]=Ay*By%MOD;
tmp.mp[][]=Ay%MOD;
tmp.mp[][]=By%MOD;
tmp.mp[][]=Ay*By%MOD;
tmp.mp[][]=%MOD; Matrix cnt=fastm(tmp,n-); Matrix g;
memset(g.mp,,sizeof(g.mp));
g.mp[][]=a0*b0%MOD;
g.mp[][]=a0%MOD;
g.mp[][]=b0%MOD;
g.mp[][]=a0*b0%MOD;
g.mp[][]=%MOD;
Matrix ans=Mul(g,cnt);
printf("%I64d\n",ans.mp[][]);
}
return ;
}
hdu 4686 Arc of Dream(矩阵快速幂乘法)的更多相关文章
- 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 ...
- HDU 4686 Arc of Dream 矩阵快速幂,线性同余 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=4686 当看到n为小于64位整数的数字时,就应该有个感觉,acm范畴内这应该是道矩阵快速幂 Ai,Bi的递推式题目 ...
- hdu 4686 Arc of Dream_矩阵快速幂
题意:略 构造出矩阵就行了 | AX 0 AXBY AXBY 0 | ...
- HDU4686 Arc of Dream 矩阵快速幂
Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ...
- 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 ...
- S - Arc of Dream 矩阵快速幂
An Arc of Dream is a curve defined by following function: where a 0 = A0 a i = a i-1*AX+AY b 0 = B0 ...
- hdu----(4686)Arc of Dream(矩阵快速幂)
Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ...
- HDOJ 4686 Arc of Dream 矩阵高速幂
矩阵高速幂: 依据关系够建矩阵 , 高速幂解决. Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/ ...
- HDU 4686 Arc of Dream(矩阵)
Arc of Dream [题目链接]Arc of Dream [题目类型]矩阵 &题解: 这题你做的复杂与否很大取决于你建的矩阵是什么样的,膜一发kuangbin大神的矩阵: 还有几个坑点: ...
- HDU4686 Arc of Dream —— 矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-4686 Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memo ...
随机推荐
- UESTC_方老师的分身 II CDOJ 915
方老师的分身 II Time Limit: 10000/5000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- Impala 2、Impala Shell 和 Impala SQL
1.Impala 外部 Shell Impala外部Shell 就是不进入Impala内部,直接执行的ImpalaShell 例如通过外部Shell查看Impala帮助可以使用: $ impala-s ...
- LightOJ 1338 && 1387 - Setu && LightOJ 1433 && CodeForces 246B(水题)
B - B Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit Status P ...
- 【SDUT 3038】迷之博弈
action=showproblem&problemid=3038">[SDUT 3038]迷之博弈 简直就是上次省赛的缩减版... 仅仅只是这个是链 省赛是环. ..1 2先 ...
- Andriod定时任务
参考地址:http://blog.sina.com.cn/s/blog_73288dd10101m6xs.html,http://blog.csdn.net/fancsxx/article/detai ...
- 查询ID为5的数据的前后各一行数据,ID不连续
首先假如有一张表 test 那么我们要查的就是 3 和 7 这里我的思路是 用SQL Server 自带的Row_Number 函数把 ID=5 的 RowNo 查出来,因为RowNo是连续的,所以它 ...
- android 数据存储之SharePreference 的几种方式
1. 常见的 getSharedPreferences(String filename,mode) 指定sp文件的名称,生成的文件名为 filename.xml 2.getPreferences(mo ...
- C# 单例模式(转)
C#设计模式学习笔记-单例模式 最近在学设计模式,学到创建型模式的时候,碰到单例模式(或叫单件模式),现在整理一下笔记. 在<Design Patterns:Elements of Resuab ...
- 为 IIS 7.0 配置 <system.webServer>
Web.config 文件中的 system.webServer 节用于指定适用于 Web 应用程序的 IIS 7.0 设置.system.WebServer 是 configuration 节的子级 ...
- oc内存管理总结(一)
**内存管理 问题 1.什么是ios内存管理? 就是在对象不再被使用的时候,把它即时的从内存中清除掉 2.为什么要使用内存管理? 1.严格的内存管理,能够是我们的应用程在性能上有很大的提高 2.如果忽 ...