由式子的性质发现都是线性的,考虑构造矩阵,先有式子,a[i] = ax * a[i-1] + ay; b[i] = bx*b[i-1] +by;

a[i]*b[i] = ax*bx*a[i-1]*b[i-1] + ax*by*a[i-1] + bx*ay*b[i-1]+ay*by;

s[i] = s[i-1] + a[i-1]*b[i-1];

由此得到递推式 :设矩阵A=

ax 0 0 0 ay
0 bx 0 0 by
ax*by bx*ay ax*bx 0 ay*by
0 0 1 1 0
0 0 0 0 1

矩阵B[i]=(a[i-1],b[i-1],a[i-1]*b[i-1],s[i-1],1)' (转置),B[i] =(a[i],b[i],a[i]*b[i],s[i],1)' (转置),则有B[i] = A*B[i-1]

令s0 = 0,则有B[0] = (a0,b0,a0*b0,s0,1)',B[n] = A^n*B[0],矩阵乘法是服从结合律的,所以先用矩阵快速幂算出A^n,再算出B[n],那么B[n][4]即为所求。

贴代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. typedef long long int ll;
  4. const int p = ;
  5. ll ax,ay,bx,by,a0,b0;
  6. struct matrix
  7. {
  8. ll m[][];
  9. } A;
  10. inline void init()
  11. {
  12. memset(A.m,,sizeof(A.m));
  13. A.m[][] =ax;
  14. A.m[][] = ay;
  15. A.m[][] = bx;
  16. A.m[][] = by;
  17. A.m[][] = ax*by%p;
  18. A.m[][] = ay*bx%p;
  19. A.m[][] = ax*bx%p;
  20. A.m[][] = ay*by%p;
  21. A.m[][] = A.m[][] = A.m[][] = ;
  22. }
  23. inline matrix mul(ll a[][],ll b[][])
  24. {
  25. matrix ans;
  26. memset(ans.m,,sizeof(ans.m));
  27. for(int i=; i<=; ++i)
  28. for(int j=; j<=; ++j)
  29. for(int k=; k<=; ++k)
  30. ans.m[i][j] = (ans.m[i][j] + a[i][k]*b[k][j]%p)%p;
  31. return ans;
  32. }
  33. inline matrix qPow(ll x)
  34. {
  35. matrix ans;
  36. memset(ans.m,,sizeof(ans.m));
  37. for(int i=; i<=; ++i)
  38. ans.m[i][i] =;
  39. init();
  40. while(x)
  41. {
  42. if(x&) ans = mul(ans.m,A.m);
  43. A = mul(A.m,A.m);
  44. x >>= ;
  45. }
  46. return ans;
  47. }
  48. int main()
  49. {
  50. // freopen("in.txt","r",stdin);
  51. ll n;
  52. while(~scanf("%I64d",&n))
  53. {
  54. scanf("%I64d%I64d%I64d%I64d%I64d%I64d",&a0,&ax,&ay,&b0,&bx,&by);
  55. matrix ans = qPow(n);
  56. ll res=;
  57. res = (res + ans.m[][]*a0%p)%p;
  58. res = (res + ans.m[][]*b0%p)%p;
  59. res = (res + ans.m[][]*((a0*b0)%p)%p)%p;
  60. res = (res + ans.m[][])%p;
  61. printf("%I64d\n",res);
  62. }
  63. return ;
  64. }

HDU 4686 矩阵快速幂 Arc of Dream的更多相关文章

  1. HDU 2855 (矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855 题目大意:求$S(n)=\sum_{k=0}^{n}C_{n}^{k}Fibonacci(k)$ ...

  2. HDU 4471 矩阵快速幂 Homework

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...

  3. HDU - 1575——矩阵快速幂问题

    HDU - 1575 题目: A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973.  Input数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n( ...

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

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

  5. 随手练——HDU 5015 矩阵快速幂

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5015 看到这个限时,我就知道这题不简单~~矩阵快速幂,找递推关系 我们假设第一列为: 23 a1 a2 ...

  6. HDU 3802 矩阵快速幂 化简递推式子 加一点点二次剩余知识

    求$G(a,b,n,p) = (a^{\frac {p-1}{2}}+1)(b^{\frac{p-1}{2}}+1)[(\sqrt{a} + \sqrt{b})^{2F_n} + (\sqrt{a} ...

  7. How many ways?? HDU - 2157 矩阵快速幂

    题目描述 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的 ...

  8. HDU 5950 矩阵快速幂

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  9. hdu 1757 矩阵快速幂 **

    一看正确率这么高,以为是水题可以爽一发,结果是没怎么用过的矩阵快速幂,233 题解链接:点我 #include<iostream> #include<cstring> ; us ...

随机推荐

  1. HTML5中canvas的save和restore方法

    canvas的save和restore方法: save() 方法把当前绘画状态的一份拷贝压入到一个保存图像状态的栈中.这里的绘画状态指坐标原点.变形时的变化矩阵(该矩阵是调用 rotate().sca ...

  2. vs2010设置编辑器背景颜色

    在nopad++中,双击选中某个关键字后,在文档中所有出现该关键字的地方都会高亮,非常方便查看在那些地方有调用. VS2010的默认颜色不够明显(尤其是将系统背景色改为 苹果绿保护色(Hue:85, ...

  3. bzoj 2820 YY的GCD 莫比乌斯反演

    题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性 ...

  4. 全国行政区划代码(json对象版)

    var area = {"110000":"北京市","110100":"北京市","110101" ...

  5. 04-树5 Complete Binary Search Tree

    这题也是第二次做,本想第一次做时参考的算法会和老师讲的一样,不想老师讲的算法用在这题感觉还不如思雪园友的算法(http://www.cnblogs.com/sixue/archive/2015/04. ...

  6. C#中的五个访问修饰符

    一.public, private, protected, internal, protected internal 1.public : 公开的, 公共的 2.private : 私有的 (只能在当 ...

  7. 2016 - 1 -19 初学HTML5 第一天

    1.HTML COMMANDS MHTL commands called elements.Usually, an element has a start tag and an end tag e.g ...

  8. Chapter 2: A Simple Servlet Container

    一.这一章从头构建一个简单的Servlet容器,可以处理Servlet和静态资源(如html文件/图片等). 要处理Servlet,必须遵循javax.servlet.Servlet规范,而处理静态资 ...

  9. 使用busybox构建根文件系统

    当我们在Qemu上运行起来自己编译的内核之后,需要使用busybox构建一个文件系统,将此文件系统挂载上去就可以使用busybox提供的各种命令了. 1.编译安装busybox 源码下载地址:http ...

  10. linux命令:pwd

    1.介绍: pwd可以查看目录的完整路径,全称是Print Working Directory,. 2.命令格式 pwd [选项] 3.命令作用 查看目录的完整路径 4.常用选项 -L 当路径为链接路 ...