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

构造出来的矩阵是这样的:根据题目的ai * bi = ……,可以发现 矩阵1 * 矩阵3 = 矩阵2。然后就是矩阵快速幂了。

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 ai+1 bi+1 ai+1*bi+1 Si+1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

3

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*BX AX*BX
0 0 0 0 1
 #include <iostream>
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>
 #include <cmath>
 #include <cctype>
 #include <algorithm>
 #include <queue>
 #include <deque>
 #include <queue>
 #include <list>
 #include <map>
 #include <set>
 #include <vector>
 #include <utility>
 #include <functional>
 #include <fstream>
 #include <iomanip>
 #include <sstream>
 #include <numeric>
 #include <cassert>
 #include <ctime>
 #include <iterator>
 const int INF = 0x3f3f3f3f;
 ][] = {{-,},{,},{,-},{,},{-,-},{-,},{,-},{,}};
 using namespace std;
 #define LL __int64
 #define MOD 1000000007
 typedef struct
 {
     LL m[][];
 }mat;
 mat X, Y;
 LL n, a0, ax, ay, b0, bx, by;
 mat multi(mat a, mat b)
 {
     mat c; int j, i, k;
     ; i < ; ++i)
     {
         ; j < ; ++j)
         {
             c.m[i][j] = ;
             ; k < ; ++k)
             {
                 c.m[i][j] += a.m[i][k] * b.m[k][j]%MOD;
             }
             c.m[i][j] %= MOD;
         }
     }
     return c;
 }
 mat power(LL k)
 {
     mat ans = X, p = Y;
     while (k)
     {
         ) ans = multi(ans, p);
         k /= ; p = multi(p, p);
     }
     return ans;
 }
 int main(void)
 {
     #ifndef ONLINE_JUDGE
     freopen("in.txt", "r", stdin );
     #endif // ONLINE_JUDGE
     ios::sync_with_stdio(false);
     while (cin>>n>>a0>>ax>>ay>>b0>>bx>>by)
     {
         "<<endl; continue;}
         memset(X.m, , sizeof(X.m));
         memset(Y.m, , sizeof(Y.m));
         X.m[][] = , X.m[][] = a0%MOD, X.m[][] = b0%MOD,
         X.m[][] = a0*b0%MOD, X.m[][] = a0*b0%MOD;
         Y.m[][] = , Y.m[][] = ay%MOD, Y.m[][] = by%MOD,
         Y.m[][] = ay*by%MOD, Y.m[][] = ay*by%MOD, Y.m[][] = ax%MOD,
         Y.m[][] = ax*by%MOD, Y.m[][] = ax*by%MOD, Y.m[][] = bx%MOD,
         Y.m[][] = ay*bx%MOD, Y.m[][] = ay*bx%MOD, Y.m[][] = ax*bx%MOD,
         Y.m[][] = ax*bx%MOD, Y.m[][] = ;
         mat ans = power(n-);
         LL touch = ans.m[][];
         cout << touch <<endl;
     }
     ;
 }

注意 n==0 的时候特判呐~

走吧,小胖!

hdu4686 Arc of Dream ——构造矩阵+快速幂的更多相关文章

  1. hdu 4686 Arc of Dream(矩阵快速幂乘法)

    Problem Description An Arc of Dream is a curve defined by following function: where a0 = A0 ai = ai- ...

  2. HDU 4686 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 构造矩阵

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4686 因为ai = ai-1*AX+AY ,bi = bi-1*BX+BY ,那么ai*bi=AX*B ...

  4. HDU 5667 构造矩阵快速幂

    HDU 5667 构造矩阵快速幂 题目描述 解析 我们根据递推公式 设 则可得到Q的指数关系式 求Q构造矩阵 同时有公式 其中φ为欧拉函数,且当p为质数时有 代码 #include <cstdi ...

  5. hdu 4565 So Easy! (共轭构造+矩阵快速幂)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4565 题目大意: 给出a,b,n,m,求出的值, 解题思路: 因为题目中出现了开根号,和向上取整后求 ...

  6. HUST 1569(Burnside定理+容斥+数位dp+矩阵快速幂)

    传送门:Gift 题意:由n(n<=1e9)个珍珠构成的项链,珍珠包含幸运数字(有且仅由4或7组成),取区间[L,R]内的数字,相邻的数字不能相同,且旋转得到的相同的数列为一种,为最终能构成多少 ...

  7. hdu 1757 (矩阵快速幂) 一个简单的问题 一个简单的开始

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 题意不难理解,当x小于10的时候,数列f(x)=x,当x大于等于10的时候f(x) = a0 * ...

  8. D. Magic Gems(矩阵快速幂 || 无敌杜教)

    https://codeforces.com/contest/1117/problem/D 题解:有一些魔法宝石,魔法宝石可以分成m个普通宝石,每个宝石(包括魔法宝石)占用1个空间,让你求占用n个空间 ...

  9. HDU4686 Arc of Dream 矩阵快速幂

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

随机推荐

  1. 安装了ubuntu14.04+windows7双系统的笔记本启动后出现grub rescue>提示符

    解决思想如下: 1.在grub rescue>提示符处输入ls  即可看到该命令列出了硬盘上的所有分区,找到安装了linux的分区,我的安装在(hd0,msdos8)下,所以我以(hd0,msd ...

  2. [Mysql] mysql临时表corrupt

    问题描述 机房临时硬件问题, 机器掉电. 恢复后, 重启mysql进程, 结果出现core dump. 而且一直循环, 无法终止, 只能kill掉. backtrace如下. # service my ...

  3. 从欧几里得距离、向量、皮尔逊系数到http://guessthecorrelation.com/

    一.欧几里得距离就是向量的距离公式 二.皮尔逊相关系数反应的就是线性相关 游戏http://guessthecorrelation.com/ 的秘诀也就是判断一组点的拟合线的斜率y/x ------- ...

  4. java高薪之路__007_反射

    参考地址: 1. http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html2. http://www.cnblogs.com/ ...

  5. c c++怎么判断一个字符串中是否含有汉字

    c c++怎么判断一个字符串中是否含有汉字 (2013-02-05 10:44:23) 转载▼     #include  #include  int main() { char sztext[] = ...

  6. 在Ubuntu中创建与Windows的共享文件夹

    在Ubuntu中创建与Windows的共享文件夹 本周的学习需要用到一个压缩包,我从QQ群里下载到了Windows里.虽说我已经安装了虚拟机增强功能,能够与Windows系统共享剪切板,但它也只能共享 ...

  7. 6/13 Sprint2 看板和燃尽图

    部分页面展示

  8. Aptana STUDIO 3 使用(续)

    1 使用Aptana studio 3 浏览ruby代码 2 设置gbk编码.打开Aptanna Studio,选择Windows->Preferences->General->Co ...

  9. C#窗体布局方式

    DataGridView:显示数据表后台数据绑定: List<xxx> list = new List<xxx>(); dataGridView1.DataSource = l ...

  10. Java—Applet

    1  Applet的定义 Applet是Java语言编写的,无法独立运行,但可以嵌入到网页中执行.它扩展了传统的编程结构和方法,可以通过互联网发布到任何具有Java编译环境浏览器的个体计算机上. 如下 ...