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/ ...
随机推荐
- MySQL主从复制和读写分离
我们知道应用对数据库的訪问通常情况下大部分都是读操作,写仅仅占非常少一部分.因此读写分离(read-write-splitting)能有效减少主库压力,从而解决站点发展过程中遇到的第一次数据库瓶颈. ...
- Could not read from remote repository.
今天换新电脑,忘了配置git环境,就去gitserver上代替码.然后一直报错,后来就又一次配置了git环境.步骤例如以下 damingwuage:Desktop damingwuage$ ssh-k ...
- c#约瑟环实现
约瑟环问题就是有n个人坐成一个圈.从某个人开始报数,数到m的人出列,接着从列出的下一个人开始重新报数,数到m的人再次出列,如此循环,直到所有的人都出列,最后按出列的顺序输出.
- BZOJ-3732 Network 图论 最小生成树 倍增
题面 题意:给你N个点,M条边的无向图 (N<=15000,M<=30000)第j条边的长度为 dj (1<=dj<=1e9),然后K个询问 (1<=K<=2000 ...
- js设计模式-门面模式
适用场景:门面模式在DOM脚本编程这种需要对各种不一致的浏览器接口的环境中很常用. 例子:阻止模式事件 var DED = widow.DED || {}; DED.util = { stopProp ...
- LVS十种调度算法介绍
1.轮叫调度(Round Robin)(简称rr) 轮叫调度(Round Robin Scheduling)算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod ...
- RMS:均方根值,RMSE:均方根误差,MSE:标准差
.均方根值(RMS),有时也称方均根.效值.英语写为:Root Mean Square(RMS). 美国传统词典的定义为:The square root of the average of squar ...
- Spring《八-一》CGLIB代理和自动代理
CGLIB代理 配置文档 <bean id="logProxy" class="org.springframework.aop.framework.ProxyFac ...
- C#解除某类警告。。。。。。。。。。
C#预处理器指令取消不必要的警告 今天将自己写的一个类库生成一个DLL后,想把注释也加进去.... 方法:在属性->生成选项卡->XML文档文件(勾选)(生成的文件名不能修改,使用时必须跟 ...
- 本地sql文件导入mysql数据库
mysql中配置my.ini interactive_timeout = 120 wait_timeout = 120 max_allowed_packet = 32M 导入sql运行命令 sourc ...