杭电多校第七场-J-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≤20 0≤A,B,C,D≤109 1≤P,n≤109
输出
样例输入
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的更多相关文章
- 杭电多校第七场 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 ...
- 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杭电多校第七场][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+ ...
- 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杭电多校第七场][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 题意是说两个人都有一些带有颜色的牌,两人轮流出牌,但是不能出对面出过的颜色的牌,最后谁不能出牌谁 ...
随机推荐
- Python高级编程-使用SQLite
SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成. Python就 ...
- BZOJ 4176 Lucas的数论 莫比乌斯反演+杜教筛
题意概述:求,n<=10^9,其中d(n)表示n的约数个数. 分析: 首先想要快速计算上面的柿子就要先把d(ij)表示出来,有个神奇的结论: 证明:当且仅当a,b没有相同的质因数的时候我们统计其 ...
- codeforces 319B Psychos in a Line(模拟)
There are n psychos standing in a line. Each psycho is assigned a unique integer from 1 to n. At eac ...
- android4.3 Bluetooth分析之扫描分析
android4.3中引入了蓝牙低能耗le(low energy),相应的也有一些方法/类.不过代码里,并没有找到初始调用的地方.所以这里还是先只分析下bt普通的扫描流程(类似android 4.2) ...
- Notes of the scrum meeting(12.9)
meeting time:14:00~17:00p.m.,December 9th,2013 meeting place:一号教学楼209 attendees: 顾育豪 ...
- Hadoop之block研究
本文翻译原链接:https://hadoopabcd.wordpress.com/2015/03/17/hdfs-file-blocks-distribution-in-datanodes/ ...
- Gym - 100851F Froggy Ford kruskal
题目链接: http://acm.hust.edu.cn/vjudge/problem/307216 Froggy Ford Time Limit: 3000MS 题意 青蛙过河,河中有若干个石头,现 ...
- 【Docker 命令】- kill命令
docker kill :杀掉一个运行中的容器. 语法 docker kill [OPTIONS] CONTAINER [CONTAINER...] OPTIONS说明: -s :向容器发送一个信号 ...
- android gradle打包常见问题及解决方案
背景: 问题: Q1: UNEXPECTED TOP-LEVEL ERROR: java.lang.OutOfMemoryError: Java heap space at com.android.d ...
- C# Find()和First()与FirstOrDefault(
1. Find方法只能在List<T>上使用,而后者能更广泛应用在IEnemerable<T>上. Find最终是建立在Array的查找之上,而在IEnemerable上的Fi ...