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的更多相关文章

  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 ...

  2. hdu 4686 Arc of Dream_矩阵快速幂

    题意:略 构造出矩阵就行了 |   AX   0    AXBY   AXBY       0  |                                                   ...

  3. HDU4686 Arc of Dream 矩阵快速幂

    Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

  4. 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 ...

  5. 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  ...

  6. hdu----(4686)Arc of Dream(矩阵快速幂)

    Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

  7. HDOJ 4686 Arc of Dream 矩阵高速幂

    矩阵高速幂: 依据关系够建矩阵 , 高速幂解决. Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/ ...

  8. HDU 4686 Arc of Dream(矩阵)

    Arc of Dream [题目链接]Arc of Dream [题目类型]矩阵 &题解: 这题你做的复杂与否很大取决于你建的矩阵是什么样的,膜一发kuangbin大神的矩阵: 还有几个坑点: ...

  9. HDU4686 Arc of Dream —— 矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-4686 Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memo ...

随机推荐

  1. mysql 数据操作 单表查询 group by 分组 目录

    mysql 数据操作 单表查询 group by 介绍 mysql 数据操作 单表查询 group by 聚合函数 mysql 数据操作 单表查询 group by 聚合函数 没有group by情况 ...

  2. go-004-数据结构

    在 Go 编程语言中,数据类型用于声明函数和变量. 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存. Go 语言按类别有以下几种 ...

  3. google浏览器插件安装

    1:安装本地插件,直接将下载好的crx插件拖入到   chrome://extensions/    的空白处 http://www.cnplugins.com/tool/outline-instal ...

  4. gerrit上sshkey设置问题

    gerrit里面设置ssh的方法  http://blog.sina.com.cn/s/blog_4d4bc1110101dbxs.html `ssh-keygen -t dsa -b 1024` d ...

  5. R语言统计词频 画词云

    原始数据: 程序: #统计词频 library(wordcloud) # F:/master2017/ch4/weibo170.cut.txt text <- readLines("F ...

  6. 测试人必备:国内外最好用的6款Bug跟踪管理系统

    在移动互联网产品中,Bug会导致软件产品在某种程度上不能满足用户的需要.确保一个项目进展顺利,关键在于妥善处理软件中的BUG,那么,如何高效的管理BUG,解决BUG?在这里,我为大家搜集了几款优秀的B ...

  7. Java集合转有类型的数组之toArray(T[] a)

    在java变成中慎用强制类型转换,尽量使用类自带的转换函数或泛型.先看一行代码 错误方法: String[] array= (String[]) list.toArray(); 如果list中存放的是 ...

  8. 2017-2018-1 JaWorld 团队作业--冲刺6

    2017-2018-1 JaWorld 团队作业--冲刺6(20162308) 实现 由于我在冲刺部分负责的是类之间的耦合,所以我就介绍一下本次游戏的总体实现. 我们定义了Sprite类,即精灵类,游 ...

  9. Javaworkers团队第四周项目总结

    本周项目进展 本周是我们的项目开发的第四周,在之前的一周,我们小组在合作的情况下基本完成了项目代码的框架编写,我们组的项目课题,小游戏--贪吃蛇以及可以运行,可以进行简单的游戏,但是我们在思考之后发现 ...

  10. Window 常用系统变量

    转载:http://www.slyar.com/blog/envionment-variables.html 转载:http://blog.csdn.net/wuliusir/article/deta ...