题目描述

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.

样例输入

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

样例输出

36
24

矩阵快速幂
问题在于p/i
上图为p=100的表,可以发现p/i相同的连续的一段的最后一个数的坐标为p/(p/i) ,然后分段做就可以了
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int p=1e9+;
int n,P,T;
ll a,b,c,d;
struct Mat
{
ll v[][]; Mat() {
memset(v, , sizeof(v));
}
void init()
{
for (int i=;i<;i++)
v[i][i]=(ll);
} };
Mat operator *(Mat a,Mat b)
{
Mat c;
for (int i=;i<;i++)
{
for (int j=;j<;j++)
{
c.v[i][j]=;
for (int k=;k<;k++)
c.v[i][j]+=((a.v[i][k]%p*b.v[k][j]%p)%p+p)%p;
}
}
return c;
}
Mat qmod(Mat a,int k)
{
Mat c;
c.init(); while (k)
{
if (k&) c=c*a;
a=a*a;
k>>=;
}
return c;
}
void solve()
{
scanf("%lld%lld%lld%lld%d%d",&a,&b,&c,&d,&P,&n);
Mat mp;
mp.v[][]=d; mp.v[][]=c;
mp.v[][]=; mp.v[][]=; for (int i=;i<=n;)
{ if(P/i==)
{
Mat w=mp;
w=qmod(w,n-i+);
cout<<(w.v[][]*b+w.v[][]*a+w.v[][])%p<<endl;
return;
} int j=min(n,P/(P/i));
Mat w=mp;
w.v[][]=P/i;
w=qmod(w,j-i+);
ll ans_a=(w.v[][]*b+w.v[][]*a+w.v[][])%p;
ll ans_b=(w.v[][]*b+w.v[][]*a+w.v[][])%p;
a=ans_a;b=ans_b;
i=j+; }
printf("%lld\n",b);
}
int main()
{
scanf("%d",&T);
while (T--) solve();
return ;
}

杭电多校第七场-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. 如果jsp表单元素的值为空,如何避免null出现在页面上?

    可以写一个简单的函数对空值进行处理,判断值是否为空,如果是空就返回空字符串.实例代码如下: <%! String blanknull(String s) { return (s == null) ...

  2. (beta冲刺5/7)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 推进后端完成安卓端接口的开发 在测试中发现返回地图接口存在错误(待修复) 推进 ...

  3. 二叉树及其遍历方法---python实现

    github:代码实现 本文算法均使用python3实现 1. 二叉树 1.1 二叉树的定义   二叉树是一种特殊的树,它具有以下特点:   (1)树中每个节点最多只能有两棵树,即每个节点的度最多为2 ...

  4. autoCAD 2008 Win7 64位, win8 64位 安装 燕秀工具箱 yanxiu.cui 文件下载

    Win7 64位, win8 64位 安装 燕秀工具箱 , 提示没有权限. 网站上下载燕秀工具箱, 安装后. 提示权限不够. 解决办法如下; 1. CAD, 权限修改. 2. 下载 yanxiu.cu ...

  5. 原生javascript自定义input[type=radio]效果

    2018年6月27日 更新 找到最为简单的仅仅使用css3的方案 <!DOCTYPE html> <html lang="en"> <head> ...

  6. Oracle AWR日志使用

    SQL>@?/rdbms/admin/awrrpt.sql Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ Would you like an H ...

  7. 自学网络 arp_ignore/arp_announce

    1)机器上有好几个IP地址,如何让网卡只接收自己IP地址的数据包: 如何只接收自己网卡的数据包 http://www.cnblogs.com/honpey/p/8447819.html 相关的配置ar ...

  8. 第43天:事件对象event

    一.事件对象事件:onmouseover. onmouseout. onclickevent //事件的对象 兼容写法:var event = event || window.event; event ...

  9. 前端基础:JavaScript BOM对象

    JavaScript BOM对象 JavaScript Window - 浏览器对象模型 浏览器对象模型(BOM)使JavaScript有能力与浏览器"对话". 浏览器对象模型(B ...

  10. BZOJ2151 种树(贪心+堆+链表/wqs二分+动态规划)

    dp容易想到,但没法进一步优化了. 考虑贪心,每次选出价值最大的物品.但这显然是不对的因为会影响其他物品的选择. 于是考虑加上反悔操作.每次选出一个物品后,将其相邻两物品删除,再将原物品价值变为相邻两 ...