欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - HDU4686


题意概括

  

  a0 = A0
  ai = ai-1*AX+AY
  b0 =
B0
  bi = bi-1*BX+BY

  求AoD(n)

  n=0时答案为0!!!!


题解

  具体的矩阵构建思路指导可以参考例题链接

  这里仅提供运算过程。

  Ai=Ai-1*AX+AY

  Bi=Bi-1*BX+BY

  AiBi=(Ai-1*AX+AY)(Bi-1*BX+BY)

        =AX*BX*Ai-1*Bi-1+AX*BY*Ai-1+BX*AY*Bi-1+AY*BY

        Si           AiBi       Ai     Bi        K

Si-1            1     0       0    0     0

Ai-1Bi-1     AX*BX   AX*BX     0    0     0

Ai-1         AX*BY   AX*BY       AX     0     0

Bi-1          BX*AY   BX*AY      0     BX    0

K          AY*BY   AY*BY       AY    BY    1

  初始矩阵:

  S0        A0B0       A0     B0   K

  A0*B0       A0*B0           A0     B0     1


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
typedef long long LL;
const LL mod=1000000007,m=5;
LL n,A0,AX,AY,B0,BX,BY;
struct Mat{
LL v[m][m];
Mat (){}
Mat (LL x){
(*this).set(x);
}
void set(LL x){
memset(v,0,sizeof v);
if (x==1)
for (int i=0;i<m;i++)
v[i][i]=1;
}
Mat operator * (Mat x){
Mat ans(0);
for (int i=0;i<m;i++)
for (int j=0;j<m;j++)
for (int k=0;k<m;k++)
ans.v[i][j]=(ans.v[i][j]+v[i][k]*x.v[k][j])%mod;
return ans;
}
void operator *= (Mat x){
(*this)=(*this)*x;
}
}M,Md;
Mat MatPow(Mat x,LL y){
Mat ans(1),now=x;
while (y){
if (y&1LL)
ans*=now;
now*=now;
y>>=1;
}
return ans;
}
int main(){
while (~scanf("%lld%lld%lld%lld%lld%lld%lld",&n,&A0,&AX,&AY,&B0,&BX,&BY)){
if (!n){
puts("0");
continue;
}
A0%=mod,AX%=mod,AY%=mod,B0%=mod,BX%=mod,BY%=mod;
LL NewArr[m][m]={{1 ,0 ,0 ,0 ,0},
{AX*BX%mod ,AX*BX%mod ,0 ,0 ,0},
{AX*BY%mod ,AX*BY%mod ,AX ,0 ,0},
{BX*AY%mod ,BX*AY%mod ,0 ,BX ,0},
{AY*BY%mod ,AY*BY%mod ,AY ,BY ,1}};
LL NewArr2[m]= {A0*B0%mod ,A0*B0%mod ,A0 ,B0 ,1};
memcpy(Md.v,NewArr,sizeof NewArr);
memcpy(M.v[0],NewArr2,sizeof NewArr2);
Md=MatPow(Md,n-1);
M*=Md;
printf("%lld\n",M.v[0][0]);
}
return 0;
}

  

HDU4686 Arc of Dream 矩阵的更多相关文章

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

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

  2. HDU4686 Arc of Dream 矩阵快速幂

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

  3. hdu----(4686)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. hdu4686 Arc of Dream 2013 Multi-University Training Contest 9矩阵快速幂

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

  6. HDU 4686 Arc of Dream(矩阵)

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

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

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

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

  9. hdu4686 Arc of Dream

    Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission ...

随机推荐

  1. Solr之java操作

    参考教程: http://www.cnblogs.com/xia520pi/p/3625232.html http://www.cnblogs.com/hujunzheng/p/5647896.htm ...

  2. mongoDB - 日常操作三

    MongoDB 进程控制 进程控制 db.currentOp() # 查看活动进程 db.$cmd.sys.inprog.findOne() # 查看活动进程 与上面一样 opid # 操作进程号 o ...

  3. 让 IE9 以下的浏览器支持 Media Queries

    1. 如何让 IE9 以下的浏览器支持 css3 的media query 需要用到的 min-width/max-width 属性 css3 的媒体查询 IE 浏览器的支持程度是从 IE9开始支持, ...

  4. jQuery的end() 方法

    定义和用法 end() 方法结束当前链条中的最近的筛选操作,并将匹配元素集还原为之前的状态. 语法 .end() 详细说明 大多数 jQuery 的遍历方法会操作一个 jQuery 对象实例,并生成一 ...

  5. 边沿检测方法-FPGA入门教程

    本节实验主要讲解FPGA开发中边沿检测方法,我们在设计中会经常用到.这个地方大家一定要理解. 1.1.1.原理介绍 学习HDL语言设计与其他语言不一样,HDL语言设计需要考虑更多的信号的电气特性,时序 ...

  6. Cython的简单使用

    Cython是一个快速生成Python扩展模块的工具,从语法层面上来讲是Python语法和C语言语法的混血,当Python性能遇到瓶颈时,Cython直接将C的原生速度植入Python程序,这样使Py ...

  7. eMMC基础技术6:eMMC data读写

    1. 前言 data可以经data线从host发往device,也可以从device发往host 数据线以是1线(DATA0),4线(DATA0~DATA3),8线(DATA0~DATA7) 对每条数 ...

  8. pyspider使用

    #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2018-11-08 22:33:55 # Project: qsbk fro ...

  9. oracle数据库自增主键重复

    select max(t.id) from T_PLAT_ENUM_VALUE tdrop sequence T_PLAT_ENUM_VALUE;create sequence T_PLAT_ENUM ...

  10. windows系统中搭建Jenkins服务器

    1       须知 100.126.36.232等Jenkins服务器是通过设置代理访问外网,管理Jenkins和插件升级站点的,本地安装受黄区网络限制需要特殊配置,且有些插件无法下载. 前提条件: ...