题目链接

  http://acm.hdu.edu.cn/showproblem.php?pid=4686

题目大意

  已知a0=A0,  ai=Ax*ai-1+Ay;

    b0=B0,  bi=Bx*bi-1+By;

  求∑ai*bi(i=0-->n-1)。

  n不超过1018,A0,Ax,Ay,B0,Bx,BY不超过2*109

题目分析

  因为n很大,不可能用递推来做,这个时候就想到了矩阵的方法。构造了好几个满足要求的,但都是仅仅满足ai或者bi的,最后才发现,把ai*bi按递推式展开,

ai*bi=Ax*By*ai-1*bi-1+Ax*By*ai-1+Ay*Bx*bi-1+By*Ay。将常数组合在一起构成一个矩阵,将变量组合在一起构成另一个矩阵,然后将ai*bi构造成矩阵递推式:

矩阵1:

  1  ai  bi  ai*bi  si(求和)

  0  0  0      0     0

  0  0  0      0     0

  0  0  0      0     0

  0  0  0      0     0

矩阵2:

  1  Ay  By  Ay*By  Ay*By

  0  Ax  0    Ax*By  Ax*By

  0  0    Bx  Ay*Bx  Ay*Bx

  0  0    0    Ax*By  Ax*By

  0  0    0    0     1

矩阵3

  1  ai+1  bi+1  ai+1*bi+1  si(求和)

  0  0  0      0     0

  0  0  0      0     0

  0  0  0      0     0

  0  0  0      0     0

显然  矩阵1*矩阵2=矩阵3。根据递推关系呢,矩阵1(i=0)*(矩阵2)n-1就能得到s(n-1)了。因而,用矩阵快速幂就能很快把问题解决了。

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const long long mod=;
typedef struct
{
long long m[][];
}mat;
mat X,Y;
mat multi(mat x,mat y)
{
mat temp;
for(int i=;i<;i++)
for(int j=;j<;j++)
{
temp.m[i][j]=;
for(int k=;k<;k++)
temp.m[i][j]+=x.m[i][k]*y.m[k][j]%mod;
temp.m[i][j]%=mod;
}
return temp;
} mat pow(long long k)//矩阵快速幂
{
mat ans=X,p=Y;
while(k)
{
if(k&)
ans=multi(ans,p);
p=multi(p,p);
k/=;
}
return ans;
} int main()
{
long long n,a0,ax,ay,b0,bx,by;
while(cin>>n>>a0>>ax>>ay>>b0>>bx>>by)
{
if(!n)//这边需要注意特判一下
{
printf("0\n");
continue;
}
memset(X.m,,sizeof(X.m));
memset(Y.m,,sizeof(Y.m));
X.m[][]=;X.m[][]=a0;X.m[][]=b0;X.m[][]=a0*b0%mod;X.m[][]=a0*b0%mod;
Y.m[][]=;Y.m[][]=ay;Y.m[][]=by;Y.m[][]=ay*by%mod;Y.m[][]=ay*by%mod;
Y.m[][]=ax;Y.m[][]=Y.m[][]=ax*by%mod;
Y.m[][]=bx;Y.m[][]=Y.m[][]=ay*bx%mod;
Y.m[][]=Y.m[][]=ax*bx%mod;
Y.m[][]=;
mat ans=pow(n-);
long long s=ans.m[][]%mod;
cout<<s<<endl;
}
return ;
}

HDU4686

  

HDU4686——Arc of Dream矩阵快速幂的更多相关文章

  1. HDU4686 Arc of Dream 矩阵快速幂

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

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

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

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

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

  6. HDU 4686 Arc of Dream 矩阵快速幂,线性同余 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=4686 当看到n为小于64位整数的数字时,就应该有个感觉,acm范畴内这应该是道矩阵快速幂 Ai,Bi的递推式题目 ...

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

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

  8. HDU4686 Arc of Dream 矩阵

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU4686 题意概括 a0 = A0 ai = ai-1*AX+AY b0 = B0 bi = bi-1* ...

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

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

随机推荐

  1. ioS开发之CoreLocation(GPS定位)

    1.概述 在iOS开发中,要想加入地图和定位功能这2大功能,必须基于2个框架进行开发 (1)Map Kit :用于地图展示 (2)Core Location :用于地理定位 2个热门专业术语: LBS ...

  2. c++学习笔记之封装篇(上)

    title: c++学习笔记之封装篇(上) date: 2017-03-12 18:59:01 tags: [c++,c,封装,类] categories: [学习,程序员,c/c++] --- 一. ...

  3. 将spring cloud打包docker镜像

    简介:用spring cloud构建微服务后,微服务肯定要docker镜像化然后用rancher等可视化工具管理,这就是走完了一套基本的流程,现在简单介绍下 环境:两台centos7.x的服务器,一台 ...

  4. 直接在CMake项目中编译GoogleTest和GoogleMock作为项目的一部分

    直接在CMake项目中编译GoogleTest和GoogleMock作为项目的一部分 本文是关于如何将GoogleTest和GoogleMock在没有预先编译安装在机器的情况下,直接在项目中作为项目的 ...

  5. xlwt 格式控制

    Examples Generating Excel Documents Using Python’s xlwt 使用Python的xlwt生成Excel文档示例 Here are some simpl ...

  6. selenide小白教程

    目的: 趁着清明假期临近把手头工作整理了一下,前段时间老大给了一个selenide研究的任务,虽然对selenium的应用比较熟悉,但是以前一直没怎么研究过其他衍生的技术,在研究过程中发现国内好的帖子 ...

  7. Java基础—String类小结

    一.String类是什么 public final class String implements java.io.Serializable, Comparable<String>, Ch ...

  8. Access-自定义控件TabControl

    p{ font-size: 15px; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid #aaa; width: 99%; ...

  9. Windows下Nginx的安装与使用(一):配置端口转发

    什么是端口转发 当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 8001 端口,电影应用启动了 8002 端口.此时如果我们可以通过: localhost:8001 //图书 lo ...

  10. 机器学习-scikit learn学习笔记

    scikit-learn官网:http://scikit-learn.org/stable/ 通常情况下,一个学习问题会包含一组学习样本数据,计算机通过对样本数据的学习,尝试对未知数据进行预测. 学习 ...