题目链接

  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. Nginx的配置文件详解

    主配置文件: 查看nginx的进程可以看到nginx所使用的配置文件: 主配置一般会被用来设置一些全局的参数: 参数详解: user nobody nobody;          //设置nginx ...

  2. IOS各种手势操作实例

    先看下效果 手势相关的介绍 IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种: 1.点击  UITapGestureRecogniz ...

  3. BFC详解

    BFC(block formating context),翻译过来就是块级格式化上下文.我们可以理解为:BFC就是一个Block-level Box内部的Block-level Box布局的一系列规则 ...

  4. ArcEngine保存栅格数据至rastercatalog

    将栅格数据(IRasterDataset)直接保存到数据库中很常见,但是保存到栅格目录下就比较少见,好不容易才找到,在这里记录一下. public void saveRasterDs2Catalog( ...

  5. React Native 可以走多远?

    对于大多数APP开发者来说,能够同时开发出Android APP和IOS APP是不是很牛逼,可是它也不是天方夜谭,自从有了一个叫React Native的东西的出现,这一切就变得可以实现了. 那么到 ...

  6. 【VB超简单入门】六、基本数据类型

    接下来要介绍VB的基本数据类型,为接下来学习变量和常量准备. 计算机只能处理二进制的数据,所以无论什么数据,在CPU里面处理都是一样的,类似101010这样的机器代码,但是让我们直接去写机器代码程序, ...

  7. centos下编译phantomjs2.0

    phantomjs是一个无头浏览器,可以用来做测试和爬虫,但是因为有一些问题没有解决,所以官网不提供2.0版本的binary包,所以要自己编译. 1.安装需要的依赖: sudo yum -y inst ...

  8. Itext中 根据html生成Word文件,包含图片

    package cn.com.wzf; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.Str ...

  9. es6编写reactjs事件处理函数绑定this三种方式

    第一种:官方推荐的: class LoginControl extends React.Component { constructor(props) { super(props); this.hand ...

  10. JavaWeb总结(八)—EL表达式

    一.EL表达式简介 EL全名Expression Language.主要有以下作用. 1.获取数据 EL表达式主要用于替换JSP页面的脚本表达式,以及各种类型的Web域中检索Java对象.获取数据.( ...