热身训练1 Sequence
http://acm.hdu.edu.cn/showproblem.php?pid=6

分析:
这道题,全都是1e9,所以我们很容易想到“矩阵快速幂”。
假如说我们没有后面那个“向下取整”的东西,而将他看作一个常熟C
我们可以很轻松的得到矩阵幂的式子

然后呢,那个常熟C却会随着i变化
我们只需要整除分块,分别进行矩阵幂,这道题就解决了
#include<bits/stdc++.h>
using namespace std;
#define re register int
#define LL long long
#define int long long
const int mo = 1e9+7;
typedef int arr[10][10];
arr A, ans;
void modi(arr y, arr x)
{
arr z; memset(z, 0, sizeof(z));
for(re i=1;i<=3;++i)
{
for(re j=1;j<=3;++j)
{
for(re k=1;k<=3;++k)
{
z[i][j] = (z[i][j] + y[i][k]*x[k][j] % mo) % mo;
}
}
}
memcpy(y, z, sizeof(z));
}
int a, b, c, d, p, n, q;
void Montgomery(int pp)
{
ans[1][3] = q % mo;
memset(A, 0, sizeof(A));
A[1][2]=c%mo; A[2][2]=d%mo; A[2][1]=A[3][2]=A[3][3]=1ll;
while(pp)
{
if(pp&1) modi(ans, A);
pp>>=1;
modi(A,A);
}
}
inline void work()
{
scanf("%lld%lld%lld%lld%lld%lld",&a,&b,&c,&d,&p,&n);
if(n == 1) printf("%lld\n", a);
else if(n == 2) printf("%lld\n", b);
else
{
memset(ans, 0, sizeof(ans));
ans[1][1]=a;
ans[1][2]=b;
for(re i=3;i<=n;)
{
q = p/i;
int nt;
if(q == 0) nt=n; else nt = min(n, p/q);
Montgomery(nt-i+1);
i=nt+1;
}
printf("%lld\n", ans[1][2] % mo);
} }
signed main()
{
int T;scanf("%lld",&T);
while(T--) work();
}
made by kzsn
“向着风拥抱彩虹,勇敢的向前走”
“黎明的那道光,会越过黑暗”
“打破一切恐惧我能,找到答案” ----《你的答案》阿冗
热身训练1 Sequence的更多相关文章
- HDU6299-2018ACM暑假多校联合训练1002-Balanced Sequence
这个题的题意是给你n个字符串,认定()是一种平衡的串,两个以上连续的()()也是一种平衡的串,如果一对括号里面包含一个平衡的串,这个括号也被算在这个平衡的串之内, 如(()(()))是一个长度为8的平 ...
- 数位dp & 热身训练7
数位dp 数位dp是一种计数用的dp,一般就是要统计一段区间$[L,R]$内,满足一定条件的数的个数,或者各个数位的个数. 数位dp使得暴力枚举变为满足一定状态的记忆化,更加优秀. 数位dp常常会考虑 ...
- 热身训练4 Article
Article 在这个学期即将结束时,DRD开始写他的最后一篇文章. DRD使用著名的Macrohard的软件World来写他的文章. 不幸的是,这个软件相当不稳定,它总是崩溃. DRD需要在他的文章 ...
- 热身训练4 Eighty seven
Eighty seven 简要题意: n个卡片,其中第i个卡片的数值为$a[i]$.一共q次询问,每次询问将删去其中3个卡片(可能删除若干相同的卡片)后,问能否选出10个卡片,数值之和等于87. n≤ ...
- 热身训练2 The All-purpose Zero
The All-purpose Zero 简要题意: 长度为n的数组,每个数字为S[i],$0$是一种很神奇的数字,你想要的,它都可以变! 问这个序列的最长上升子序列长度为多少? 分析: 我们将除了 ...
- 热身训练3 Palindrome
Palindrome 简要题意: 我们有一个字符串S,字符串的长度不超过500000. 求满足S[i]=S[2n−i]=S[2n+i−2](1≤i≤n)(n≥2)的子串个数. 分析: 我们能通过简 ...
- 热身训练2 GCD
题目描述 简要题意: n个数字,a1,a2,...,an m次询问(l,r),每次询问需回答 1.gcd(al,al+1,al+2,...,ar);2.gcd(ax,ax+1,ax+2,...,ay ...
- 热身训练2 Another Meaning
题目来源 简要题意: 众所周知,在许多情况下,一个词语有两种意思.比如"hehe",不仅意味着"hehe",还意味着"excuse me". ...
- 热身训练1 Calculator
题目出处:Calculator 简要题意: 你有一个确定的函数,f(x)=+...*...^...,其中共有n个操作,从左到右依次计算. 共有m次询问,我们每次询问,1.会修改f(x)中的操作:2.输 ...
随机推荐
- AntDesign VUE:上传组件自定义限制的两种方式(Boolean、Promise)
AntD上传组件 AntDesign VUE文档 第一种方式 beforeUpload(file) { let isLt = true if (filesSize) { isLt = file.siz ...
- 如何在线安全清理mysql慢日志
部门mysql数据库的服务器磁盘空间快满了,查看了下磁盘的慢日志,发现占了50多个g,百度了资料后删除成功,现在和大家分享下我清理的过程,或许有更好的办法. 1.首先连接进入mysql,查看慢日志的状 ...
- [Apache Atlas] Atlas 架构设计及源代码简单分析
Apache Atlas 架构图 Atlas 支持多数据源接入:Hive.HBase.Storm等 Type System Type Atlas 中定义了一些元数据类型 ── AtlasBaseTyp ...
- Jmeter扩展组件开发(2) - 扩展开发第一个demo的实现
maven工程src目录介绍 main:写代码 main/java:写Java代码 main/resources:写配置文件 test:写测试代码 test/java demo实现 创建Package ...
- Shell系列(23)- 字符截取命令sed
简述 字符替换命令sed 和vi功能相似,但是vi是给用户用的,sed是给脚本用的 sed是一种几乎包括在所有的UNIX平台(包括Linux)的轻量级流编辑器.s sed主要是用来将数据进行选取.替换 ...
- 常用的ppt技巧
取色器 对齐 形状使用
- PHP 处理历史数据的伪代码
<?php class a { protected static $Senior = [1, 2, 3]; protected static $NoSenior = [13, 14, 15, 1 ...
- 当你创建了一个 Deployment 时,Kubernetes 内部发生了什么?
我们通常使用 kubectl 来管理我们的 Kubernetes 集群. 当我们需要一个 Nginx 服务时,可以使用以下命令来创建: kubectl create deployment nginx ...
- MySQL安装指导文档
MySQL 是最流行的关系型数据库管理系统,可以在本地搭建一个mysql的环境,便于学习. windows7/windows10 5.7.26 安装mysql前环境准备工作 1) 要有Net fram ...
- mybatis中#{}与${}取值的区别
1. 首先对于一个接口 Employee getEmpByIdAndName(@Param("id") Integer id,@Param("empName") ...