HDU 4686
再不能直视这道题,换INT64就过了。。。。。。。
同样可以使用矩阵的方法。构造1*5的
D[N],a[n],b[n],a【n】*b[n],1
接着你应该就会了。
#include <iostream>
#include <cstdio>
#include <algorithm>
#define LL __int64 using namespace std; const LL Mod=1000000007; struct Matrax{
LL m[6][6];
};
LL N,A0, AX, AY,B0, BX, BY; Matrax a,per; void initial(){
for(int i=0;i<5;i++){
for(int j=0;j<5;j++)
a.m[i][j]=per.m[i][j]=0;
}
for(int i=0;i<5;i++)
per.m[i][i]=1;
a.m[0][0]=a.m[3][0]=1;
a.m[1][1]=(AX); a.m[4][1]=(AY);
a.m[2][2]=(BX); a.m[4][2]=(BY);
a.m[1][3]=(AX* BY)%Mod;
a.m[2][3]=(AY* BX)%Mod; a.m[3][3]= (AX* BX)%Mod;
a.m[4][3]=(AY* BY)%Mod;
a.m[4][4]=1;
} Matrax multi(Matrax a,Matrax b){
Matrax c;
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
c.m[i][j]=0;
for(int k=0;k<5;k++)
c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%Mod;
}
}
return c;
} Matrax quick(LL k){
Matrax ans=per,p=a;
while(k){
if(k&1){
ans=multi(ans,p);
}
k>>=1;
p=multi(p,p);
}
return ans;
} LL ts[5]; int main(){
while(scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d",&N,&A0,&AX,&AY,&B0,&BX,&BY)!=EOF){
// while(scanf("%lld%lld%lld%lld%lld%lld%lld",&N,&A0,&AX,&AY,&B0,&BX,&BY)!=EOF){
LL tp=0;
if(N==0){ printf("0\n"); continue; }
A0%=Mod; B0%=Mod;
AX%=Mod; AY%=Mod;
BX%=Mod; BY%=Mod;
ts[0]=A0*B0%Mod;
ts[1]=(A0*AX+AY)%Mod;
ts[2]=(B0*BX+BY)%Mod;
ts[3]=(ts[1]*ts[2])%Mod;
ts[4]=1;
initial();
Matrax ans=quick(N-1);
for(int i=0;i<5;i++){
tp=(tp+ts[i]*ans.m[i][0])%Mod;
}
// printf("%lld\n",tp%Mod);
printf("%I64d\n",tp%Mod);
}
return 0;
}
HDU 4686的更多相关文章
- HDU 4686 Arc of Dream(矩阵)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4686 题意: 思路: #include <iostream>#include <cs ...
- 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(快速幂矩阵)
题目链接 再水一发,构造啊,初始化啊...wa很多次啊.. #include <cstring> #include <cstdio> #include <string&g ...
- HDU 4686 Arc of Dream (矩阵快速幂)
Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ...
- HDU 4686 矩阵快速幂 Arc of Dream
由式子的性质发现都是线性的,考虑构造矩阵,先有式子,a[i] = ax * a[i-1] + ay; b[i] = bx*b[i-1] +by; a[i]*b[i] = ax*bx*a[i-1]*b[ ...
- hdu 4686 Arc of Dream
思路:构造矩阵 a[i]*b[i]=ax*bx*a[i-1]*b[i-1]+ax*by*a[i-1]+ay*bx*b[i-1]+ay*by 代码如下: #include<iostream> ...
- hdu 4686 Arc of Dream_矩阵快速幂
题意:略 构造出矩阵就行了 | AX 0 AXBY AXBY 0 | ...
- hdu 4686 Arc of Dream(矩阵快速幂乘法)
Problem Description An Arc of Dream is a curve defined by following function: where a0 = A0 ai = ai- ...
- HDU 4686 Arc of Dream(递归矩阵加速)
标题效果:你就是给你一程了两个递推公式公式,第一个让你找到n结果项目. 注意需要占用该公式的复发和再构造矩阵. Arc of Dream Time Limit: 2000/2000 MS (Java/ ...
随机推荐
- java 命令行 编译 运行程序
学习java使用IDE前最好先用用命令行的javac.java来跑一跑简单的程序,这样能够熟悉一下包管理对.class文件路径的影响. 我们先写一段简单的代码: package com.csdn.lk ...
- luogu3386 【模板】 二分图匹配
基本概念:二分图有两种节点:X节点和Y节点.如果X和Y可以匹配, 则X与Y连着一条边.每个X节点最多只能匹配一个Y节点,同时每个Y节点最多只能匹配一个X节点.最大匹配便是最多的匹配数. 交错路径:交错 ...
- Android常用的一些make命令【转】
本文转载自:http://blog.csdn.net/liuxd3000/article/details/39181377 1.make -jX X表示数字,这个命令将编译Android系统并生成镜 ...
- sql server drop login failed
https://stackoverflow.com/questions/37275/sql-query-for-logins https://www.mssqltips.com/sqlserverti ...
- Python 3.x 判断 dict 是否包含某个键
Python 3.x不再支持 has_key() 函数,而被__contains__('key')所替代,会返回bool,可以用其做判断. 代码示例: >>> user = 'dad ...
- BZOJ 1196 二分+Kruskal
思路: 二分答案 判一下能不能加 //By SirisuRen #include <cstdio> #include <cstring> #include <algori ...
- lhgdialog.js弹出框
官方学习网址: http://www.lhgdialog.com/ 个人认为它的样式不太好调,除此之外它也是一款实用的弹出框,专业的用来提示文字,消息,按钮添加function().ifame: 以下 ...
- How to share memory between services and user processes?
除了必要的InitializeSecurityDescriptor和SetSecurityDescriptorDacl, 内存映射文件名必须GLOBAL开头.
- Java之关于面向对象
面向对象,呃,别给我说程序员找不到对象,那是windows才会出现的情况~~~ 就简单记下笔记什么的吧. 1.关于定义和赋值 之前总是搞混淆,说到底是没有搞清楚. shit bigOne=new sh ...
- Python中的多个装饰器装饰一个函数
def wrapper1(func1): def inner1(): print('w1 ,before') func1() print('w1 after') return inner1 def w ...