杭电多校第七场 1010 Sequence(除法分块+矩阵快速幂)
Sequence
Your job is simple, for each task, you should output Fn module 109+7.
Then, for the next T lines, each line consists of 6 integers, A , B, C, D, P, n.
1≤T≤200≤A,B,C,D≤1091≤P,n≤109
24
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
using namespace std;
const long long mod=1e9+;
struct jz//结构体写法的矩阵快速幂
{
long long num[][];
jz() { memset(num,,sizeof(num)); }
jz operator*(const jz &P)const
{
jz ans;
for(int k=;k<;k++)
for(int i=;i<;i++)
for(int j=;j<;j++)
ans.num[i][j]=(ans.num[i][j]+num[i][k]*P.num[k][j]%mod)%mod;
return ans;
}
}COE,ans,unit;
int T_T;
long long A,B,C,D,P,n;
jz pOw(jz X,long long m)//矩阵快速幂
{
jz ans;
for(ans=unit;m;m>>=,X=X*X)
if(m&)
ans=ans*X;
return ans;
}
void init(long long A,long long B,long long C,long long D,long long x)//更新关系矩阵
{
COE.num[][]=;
COE.num[][]=;
COE.num[][]=;
COE.num[][]=C;
COE.num[][]=D;
COE.num[][]=x; // this element need to be changed each step.
COE.num[][]=;
COE.num[][]=;
COE.num[][]=;
return;
}
int main()
{
for(int i=;i<;i++) unit.num[i][i]=;
scanf("%d",&T_T);
while(T_T--)
{
scanf("%lld%lld%lld%lld%lld%lld",&A,&B,&C,&D,&P,&n);
if(n==) printf("%lld\n",A);
else if(n<P)
{
ans.num[][]=A;
ans.num[][]=B;
ans.num[][]=;
for(long long i=;i<=n;i=P/(P/i)+)//除法分块
{
init(A,B,C,D,P/i);
if(n<=P/(P/i)) COE=pOw(COE,n-i+);
else COE=pOw(COE,P/(P/i)+-i);
ans=COE*ans;
}
printf("%lld\n",ans.num[][]);
}
else if(P<=n)
{
ans.num[][]=A;
ans.num[][]=B;
ans.num[][]=;
for(long long i=;i<=P;i=P/(P/i)+)//除法分块
{
init(A,B,C,D,P/i);
COE=pOw(COE,P/(P/i)+-i);
ans=COE*ans;
}
init(A,B,C,D,);
COE.num[][]=;
COE=pOw(COE,n-max(P,2LL));//多余的一段的整除值都是0
ans=COE*ans;
printf("%lld\n",ans.num[][]);
}
}
fclose(stdin);
fclose(stdout);
return ;
}
杭电多校第七场 1010 Sequence(除法分块+矩阵快速幂)的更多相关文章
- 杭电多校第七场-J-Sequence
题目描述 Let us define a sequence as belowYour job is simple, for each task, you should output Fn module ...
- hdu61272017杭电多校第七场1008Hard challenge
Hard challenge Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
- 2017杭电多校第七场1011Kolakoski
Kolakoski Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Tota ...
- 2017杭电多校第七场1005Euler theorem
Euler theorem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
- 2019杭电多校第七场 HDU - 6656 Kejin Player——概率&&期望
题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...
- 【杭电多校第七场】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. 给你三 ...
- [2019杭电多校第七场][hdu6656]Kejin Player
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意为从i级花费a元有p的概率升到i+1级,有1-p的概率降到x级(x<i),查询从L级升 ...
- [2019杭电多校第七场][hdu6655]Just Repeat
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6655 题意是说两个人都有一些带有颜色的牌,两人轮流出牌,但是不能出对面出过的颜色的牌,最后谁不能出牌谁 ...
- [2019杭电多校第七场][hdu6651]Final Exam
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6651 题意:n个科目,总共m分,通过一科需要复习花费科目分数+1分钟,在不知道科目分数的情况下,问最少 ...
随机推荐
- Inotify&Sersync文件监视工具配置
一.Inotify介绍:一共安装2个工具(命令),即inotifywait和inotifywatchinotifywait:在被监控的文件或目录上等待特定文件系统事件(open.close.delet ...
- p1218 Superprime Rib
深搜,添加数字后如果仍为质数,继续递归. #include <iostream> #include <cstdio> #include <cmath> #inclu ...
- python记录_day30 多进程
1.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 同一个程序执行两次,就会产生两个进程 ## 进程调度算 ...
- python装饰器概念与应用
格式一:装饰器外层不传参,内层传参 user_status = False # 用户登录了就把这个改成True def login(func): # 把要执行的henan模块从这里传进来 def in ...
- 局域网两台机器ping超时
在防火墙的高级设置中的入站规则里,找icmpv4 ,我的两条电脑都是无线连的,看你的无线是专用还是公用,开启对应的规则. windows默认是关闭的,我的系统前些天刚重置过,ping超时,还是要手动开 ...
- AWS EC2 MySQL迁移到RDS案例
Amazon Relational Database Service (Amazon RDS) 是一种Web 服务,可让用户更轻松地在云中设置.操作和扩展关系数据库.它可以为行业标准关系数据库提供经济 ...
- 将本地分支push到远程分支
git push origin [localbranch]:[remotebranch]
- rac备份及恢复的重要概念之一——Redo Threads和Streams
rac数据库的备份和恢复,与单实例Oracle数据库的备份和恢复没有根本的不同,但区别还是有的,如果大家理解了Redo Threads和Streams概念,也就没什么了,下面这段文字清晰了解释了两者的 ...
- [LeetCode] 20. Valid Parentheses ☆
转载:https://leetcode.windliang.cc/leetCode-20-Valid%20Parentheses.html 描述 Given a string containing j ...
- jcmd
1.jps 2.jcmd 1761[pid] PerfCounter.print 查看指定进程的性能统计信息 概述 在JDK1.7以后,新增了一个命令行工具 jcmd.他是一个多功能的工具,可以用它来 ...