HDU 4686 Arc of Dream 矩阵快速幂,线性同余 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=4686
当看到n为小于64位整数的数字时,就应该有个感觉,acm范畴内这应该是道矩阵快速幂
Ai,Bi的递推式题目已经给出,
Ai*Bi=Ax*Bx*(Ai-1*Bi-1)+Ax*By*Ai-1+Bx*Ay*Bi-1+Ay*By
AoD(n)=AoD(n-1)+AiBi
构造向量I{AoD(i-1),Ai*Bi,Ai,Bi,1}
初始向量为I0={0,A0*B0,A0,B0,1}
构造矩阵A{
1,0,0,0,0,
1,Ax*Bx,0,0,0,
0,Ax*By,Ax,0,0,
0,Bx*Ay,0,Bx,0,
0,Ay*By,Ay,By,1,
}
则I0*(A)^n则为包含结果的向量,此时I[0]即为解答
注意:
1.据说有n=0,直接输出0
2.long long的使用
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
ll n,ao,bo,ax,bx,ay,by;
void init(ll** ans,ll** base){
fill(ans[0],ans[0]+5,0);
fill(base[0],base[0]+25,0);
ans[0][1]=ao*bo%mod;
ans[0][2]=ao;
ans[0][3]=bo;
ans[0][4]=1;
base[0][0]=1;
base[1][0]=1;base[1][1]=ax*bx%mod;
base[2][1]=ax*by%mod;base[2][2]=ax;
base[3][1]=bx*ay%mod;base[3][3]=bx;
base[4][1]=ay*by%mod;base[4][2]=ay;base[4][3]=by;base[4][4]=1;
}
void print(ll **t ,int m,int r){
for(int i=0;i<m;i++){
for(int j=0;j<r;j++){
printf("%I64d ",t[i][j]);
}
puts("");
}
} void multi(ll** t,ll** b,ll ** tmp,int m,int r,int s){
fill(tmp[0],tmp[0]+m*s,0);
for(int i=0;i<m;i++){
for(int j=0;j<s;j++){
for(int k=0;k<r;k++){
tmp[i][j]+=(t[i][k]*b[k][j])%mod;
tmp[i][j]%=mod;
}
}
}
} void qpow(ll** ans,ll ** base,ll**tmp,ll time,int r,int m){
while(time>0){
if(time&1){
multi(ans,base,tmp,r,m,m);
copy(tmp[0],tmp[0]+r*m,ans[0]);
time--;
}
multi(base,base,tmp,m,m,m);
copy(tmp[0],tmp[0]+m*m,base[0]);
time>>=1;
}
} int main(){
ll ** ans = new ll*[1],**tmp=new ll*[5],** base =new ll*[5];
ans[0]=new ll[5],tmp[0]=new ll[25],base[0]=new ll[25];
for(int i=1;i<5;i++){
tmp[i]=tmp[0]+5*i;
base[i]=base[0]+5*i;
}
while(scanf("%I64d",&n)==1){
scanf("%I64d%I64d%I64d",&ao,&ax,&ay);
ao%=mod;ax%=mod;ay%=mod;
scanf("%I64d%I64d%I64d",&bo,&bx,&by);
bo%=mod;bx%=mod;by%=mod;
if(n==0)puts("0");
else {
init(ans,base);
qpow(ans,base,tmp,n,1,5);
printf("%I64d\n",ans[0][0]);
} }
delete ans;delete base;delete tmp;
return 0;
}
HDU 4686 Arc of Dream 矩阵快速幂,线性同余 难度:1的更多相关文章
- 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_矩阵快速幂
题意:略 构造出矩阵就行了 | 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 ...
随机推荐
- BBS - 文章详细页、点赞、踩灭
一.文章详细页 文章详细页:1.链接:<div><h5><a href="/blog/{{ article.user.username }}/articles/ ...
- 【Python+Selenium】猪猪练习成功版:csv文件的输入和输出(运行环境:python3.5版本)
自己实践成功的从csv文件中读取用户名密码并实际登录系统后判断是否登录成功,并将已经运行的用户名密码及运行结果输出到一个新的csv文件中~ # coding=utf-8 from selenium i ...
- .NET、NET Framewor以及.NET Core的关系(二)
什么是CLR,.NET虚拟机? 实际上,.NET不仅提供了自动内存管理的支持,他还提供了一些列的如类型安全.应用程序域.异常机制等支持,这些 都被统称为CLR公共语言运行库. CLR是.NET类型系统 ...
- Exhibitor(zookeeper监控工具)
具体看github上的文档,很详细https://github.com/soabase/exhibitor/wiki/Running-Exhibitor 一. 这个是Netflix出品的一个监控工具, ...
- php5.6安装gd库
rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -Uvh ht ...
- 梅尔频率倒谱系数(MFCC) 学习笔记
最近学习音乐自动标注的过程中,看到了有关使用MFCC提取音频特征的内容,特地在网上找到资料,学习了一下相关内容.此笔记大部分内容摘自博文 http://blog.csdn.net/zouxy09/ar ...
- Linux学习笔记之Linux最小化安装启动后如何配置
在VM虚拟机中安装CentOS 7 时 有时候顾虑到电脑硬件性能,我们需要最小化安装,而最小化安装后与centos6的版本是有一些差异的,接下来我们就对刚安装好的最小化centos7做一些操作,来世我 ...
- Vue学习笔记之Vue的模板字符串
0x00 模板字符串 传统的JavaScript语言,输出模板通常是这样的写的. $('#result').append( 'There are <b>' + basket.count + ...
- 【Android】使用BaseAdapter实现复杂的ListView【转】
本文转载自:http://blog.csdn.net/jueblog/article/details/11857281 步骤 使用BaseAdapter实现复杂的ListView的步骤: 1. 数据你 ...
- [BZOJ2834]回家的路
Description Input Output Sample Input 2 1 1 2 1 1 2 2 Sample Output 5 思路还是很简单的,然而最短路打错各种对拍各种调了一早上 ...