题目描述

Let us define a sequence as below

Your job is simple, for each task, you should output Fn module 109+7.

输入

The first line has only one integer T, indicates the number of tasks.
Then, for the next T lines, each line consists of 6 integers, A , B, C, D, P, n.
1≤T≤20  0≤A,B,C,D≤109  1≤P,n≤109

输出

output Fn module 109+7.

样例输入

  1. 2
  2. 3 3 2 1 3 5
  3. 3 2 2 2 1 4

样例输出

  1. 36
  2. 24

  1. 矩阵快速幂
  2. 问题在于p/i
  3. 上图为p=100的表,可以发现p/i相同的连续的一段的最后一个数的坐标为p/(p/i) ,然后分段做就可以了
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. const int p=1e9+;
  5. int n,P,T;
  6. ll a,b,c,d;
  7. struct Mat
  8. {
  9. ll v[][];
  10.  
  11. Mat() {
  12. memset(v, , sizeof(v));
  13. }
  14. void init()
  15. {
  16. for (int i=;i<;i++)
  17. v[i][i]=(ll);
  18. }
  19.  
  20. };
  21. Mat operator *(Mat a,Mat b)
  22. {
  23. Mat c;
  24. for (int i=;i<;i++)
  25. {
  26. for (int j=;j<;j++)
  27. {
  28. c.v[i][j]=;
  29. for (int k=;k<;k++)
  30. c.v[i][j]+=((a.v[i][k]%p*b.v[k][j]%p)%p+p)%p;
  31. }
  32. }
  33. return c;
  34. }
  35. Mat qmod(Mat a,int k)
  36. {
  37. Mat c;
  38. c.init();
  39.  
  40. while (k)
  41. {
  42. if (k&) c=c*a;
  43. a=a*a;
  44. k>>=;
  45. }
  46. return c;
  47. }
  48. void solve()
  49. {
  50. scanf("%lld%lld%lld%lld%d%d",&a,&b,&c,&d,&P,&n);
  51. Mat mp;
  52. mp.v[][]=d; mp.v[][]=c;
  53. mp.v[][]=; mp.v[][]=;
  54.  
  55. for (int i=;i<=n;)
  56. {
  57.  
  58. if(P/i==)
  59. {
  60. Mat w=mp;
  61. w=qmod(w,n-i+);
  62. cout<<(w.v[][]*b+w.v[][]*a+w.v[][])%p<<endl;
  63. return;
  64. }
  65.  
  66. int j=min(n,P/(P/i));
  67. Mat w=mp;
  68. w.v[][]=P/i;
  69. w=qmod(w,j-i+);
  70. ll ans_a=(w.v[][]*b+w.v[][]*a+w.v[][])%p;
  71. ll ans_b=(w.v[][]*b+w.v[][]*a+w.v[][])%p;
  72. a=ans_a;b=ans_b;
  73. i=j+;
  74.  
  75. }
  76. printf("%lld\n",b);
  77. }
  78. int main()
  79. {
  80. scanf("%d",&T);
  81. while (T--) solve();
  82. return ;
  83. }

杭电多校第七场-J-Sequence的更多相关文章

  1. 杭电多校第七场 1010 Sequence(除法分块+矩阵快速幂)

    Sequence Problem Description Let us define a sequence as below f1=A f2=B fn=C*fn-2+D*fn-1+[p/n] Your ...

  2. 2019杭电多校第七场 HDU - 6656 Kejin Player——概率&&期望

    题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...

  3. 【杭电多校第七场】A + B = C

    原题: Given a,b,c, find an arbitrary set of x,y,z such that a*10^x+b*10^y=c*10^z and 0≤x,y,z≤10^6. 给你三 ...

  4. [2019杭电多校第七场][hdu6646]A + B = C(hash)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6646 题意为求a*10x+b*10y=c*10z满足公式的任意一组解x,y,z. 因为c有可能会由a+ ...

  5. hdu61272017杭电多校第七场1008Hard challenge

    Hard challenge Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) ...

  6. 2017杭电多校第七场1011Kolakoski

    Kolakoski Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Tota ...

  7. 2017杭电多校第七场1005Euler theorem

    Euler theorem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) ...

  8. [2019杭电多校第七场][hdu6656]Kejin Player

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意为从i级花费a元有p的概率升到i+1级,有1-p的概率降到x级(x<i),查询从L级升 ...

  9. [2019杭电多校第七场][hdu6655]Just Repeat

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6655 题意是说两个人都有一些带有颜色的牌,两人轮流出牌,但是不能出对面出过的颜色的牌,最后谁不能出牌谁 ...

随机推荐

  1. ZOJ 2532 Internship(最大流找关键割边)

    Description CIA headquarter collects data from across the country through its classified network. Th ...

  2. 搭建备份到业务迁移---mysql

    mysql安装启动以及配置 使用到阿里云主机直接yum安装以及配置 [root@yunwei-169 mysql]# yum install mysql mysql-server [root@yunw ...

  3. android仿系统Launcher界面,实现分屏,左右滑动效果(ViewSwitcher)

    ViewSwitcher代表了视图切换组件, 本身继承了FrameLayout ,可以将多个View叠在一起 ,每次只显示一个组件.当程序控制从一个View切换到另个View时,ViewSwitche ...

  4. 共享程序集GAC

    原文标题: 原文地址:https://www.cnblogs.com/1996V/p/9037603.html 共享程序集GAC 我上面说了这么多有关CLR加载程序集的细节和规则,事实上,类似于msc ...

  5. Java容器之List接口

    List 接口: 1. List 接口是 Collection 的子接口,实现 List 接口的容器类中的元素是有顺序的,而且可以重复: 2. List 容器中的元素都对应一个整数型的序号记载其在容器 ...

  6. lintcode-160-寻找旋转排序数组中的最小值 II

    160-寻找旋转排序数组中的最小值 II 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 数组中可能存在 ...

  7. iis7 appcmd命令

    iis中提供了appcmd命令 可以通过命令行来配置iis appcmd.exe 默认路径在 c:\windows\system32\inetsrv\下 若要回收应用程序池,请使用以下语法: appc ...

  8. Android 如何判断CPU是32位还是64位

    转自:http://blog.csdn.net/wangbaochu/article/details/47723265 1. 读取Android 的system property ("ro. ...

  9. ASP.NET MVC4中使用bootstrip模态框时弹不出的问题

    最近发现使用在MVC中使用bootstrip的模态框时弹不出来,但单独建立一HTML文件时可以弹出,说明代码没有问题,经过多次测试发现,在MVC的cshtml文件中添加上以下语句就能正常 @{ Lay ...

  10. BZOJ4310 跳蚤(后缀数组+二分答案)

    注意到答案一定是原串的子串,于是考虑造出SA,二分答案是第几小的子串.第k小子串很容易在SA上求出.之后计算使他成为最大子串至少要在几个位置切割,对每个字典序比答案大的后缀,找到所有合法切割位置(求l ...