Loj #3096. 「SNOI2019」数论
Loj #3096. 「SNOI2019」数论
题目描述
给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出:
\]
换言之,就是问有多少个小于 \(T\) 的非负整数 \(x\) 满足:\(x\) 除以 \(P\) 的余数属于 \(A\) 且 \(x\) 除以 \(Q\) 的余数属于 \(B\)。
输入格式
第一行 \(5\) 个用空格隔开的整数 \(P,Q,n,m,T\)。
第二行 \(n\) 个用空格隔开的整数,表示集合 \(A=\{A_1,A_2,\dots ,A_n\}\)。保证 \(A_i\) 两两不同,且 \(0 \le A_i < P\)。
第三行 \(m\) 个用空格隔开的整数,表示集合 \(B=\{B_1,B_2,\dots ,B_m\}\)。保证 \(B_i\) 两两不同,且 \(0 \le B_i < Q\)。
输出格式
输出一行一个整数表示答案。
数据范围与提示
对于所有数据,\(1 \le n, m \le 10^6, 1 \le P, Q \le 10^6, 1 \le T \le 10^{18}\)。
* 对于 \(10\%\) 的数据,\(T \le 10^6\)。
* 对于另外 \(20\%\) 的数据,\(P, Q \le 1000\)。
* 对于另外 \(10\%\) 的数据,\(T\) 是 \(P, Q\) 的公倍数。
* 对于另外 \(10\%\) 的数据,\(P, Q\) 互质,且 \(P,Q \le 10^5\)。
* 对于另外 \(10\%\) 的数据,\(P, Q\) 互质。
\(\\\)
考虑枚举\(a_i\),然后计算有多少个\(x\)满足\(x\%P =a_i\)且\(x\%Q\in B\)。
首先\(x\)可以表示为\(a_i+P*t\),然后\((a_i+P*t)\%Q\)是有循环的。具体来说是\(\gcd(P,Q)\)个长为\(\frac{Q}{\gcd(P,Q)}\)的环。知道这个过后就很好做了。
代码:
#include<bits/stdc++.h>
#define ll long long
#define N 1000005
using namespace std;
inline ll Get() {ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}
ll P,Q,T;
ll ans;
int n,m;
int a[N],b[N];
ll gcd(ll a,ll b) {return !b?a:gcd(b,a%b);}
ll lcm;
int sum[N];
bool vis[N];
int pre[N],tot[N];
int cir;
bool key[N];
int rk[N];
int main() {
P=Get(),Q=Get(),n=Get(),m=Get(),T=Get();
cir=Q/gcd(P,Q);
for(int i=1;i<=n;i++) a[i]=Get();
for(int i=1;i<=m;i++) {
b[i]=Get(),sum[b[i]]++;
key[b[i]]=1;
}
for(int i=0;i<Q;i++) {
if(vis[i]) continue ;
vis[i]=1;
int now,last=i;
rk[i]=1;
for(now=(last+P)%Q;now!=i;last=now,now=(now+P)%Q) {
rk[now]=rk[last]+1;
sum[now]+=sum[last];
vis[now]=1;
}
tot[i]=sum[last];
for(int j=(i+P)%Q;j!=i;j=(j+P)%Q) tot[j]=sum[last];
}
for(int i=1;i<=n;i++) {
if(a[i]>=T) continue ;
ll lim=(T-1-a[i])/P;
ll A=a[i]%Q,B=(A+lim%cir*P)%Q;
ans+=lim/cir*tot[A];
if(rk[A]<=rk[B]) ans+=sum[B]-sum[A]+key[A];
else ans+=tot[A]-(sum[A]-sum[B]-key[A]);
}
cout<<ans;
return 0;
}
Loj #3096. 「SNOI2019」数论的更多相关文章
- 【LOJ】#3096. 「SNOI2019」数论
LOJ#3096. 「SNOI2019」数论 如果\(P > Q\)我们把\(P\)和\(Q\)换一下,现在默认\(P < Q\) 这个时候每个合法的\(a_i\)都可以直接落到\(Q\) ...
- 【LOJ】#3098. 「SNOI2019」纸牌
LOJ#3098. 「SNOI2019」纸牌 显然选三个以上的连续牌可以把他们拆分成三个三张相等的 于是可以压\((j,k)\)为有\(j\)个连续两个的,有\(k\)个连续一个的 如果当前有\(i\ ...
- 【LOJ】#3097. 「SNOI2019」通信
LOJ#3097. 「SNOI2019」通信 费用流,有点玄妙 显然按照最小路径覆盖那题的建图思路,把一个点拆成两种点,一种是从这个点出去,标成\(x_{i}\),一种是输入到这个点,使得两条路径合成 ...
- 【LOJ】#3095. 「SNOI2019」字符串
LOJ#3095. 「SNOI2019」字符串 如果两个串\(i,j\)比较\(i < j\),如果离\(a_{i}\)最近的不同的数是\(a_{k}\),如果\(j < k\)那么\(i ...
- 【LOJ#3096】[SNOI2019]数论
[LOJ#3096][SNOI2019]数论 题面 LOJ 题解 考虑枚举一个\(A\),然后考虑有多少个合法的\(B\). 首先这个数可以写成\(a_i+kP\)的形式,那么它模\(Q\)的值成环. ...
- LOJ #2721. 「NOI2018」屠龙勇士(set + exgcd)
题意 LOJ #2721. 「NOI2018」屠龙勇士 题解 首先假设每条龙都可以打死,每次拿到的剑攻击力为 \(ATK\) . 这个需要支持每次插入一个数,查找比一个 \(\le\) 数最大的数(或 ...
- Loj #2192. 「SHOI2014」概率充电器
Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...
- Loj #3093. 「BJOI2019」光线
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...
- Loj #3089. 「BJOI2019」奥术神杖
Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...
随机推荐
- winform 实现类似于TrackBar的自定义滑动条,功能更全
功能很全,随便列几个 1.可以设置滑块的大小,边框颜色.背景色.形状等等吧 2.可以设置轨道的方向.边框颜色.背景色.阴影等等 ... 效果图: 下载链接https://download.csdn.n ...
- kubernetes 客户端KubeClient使用及常用api
KubeClient是kubernetes 的C#语言客户端简单易用,KubeClient是.NET Core(目标netstandard1.4)的可扩展Kubernetes API客户端, gith ...
- 【机器学习笔记五】聚类 - k均值聚类
参考资料: [1]Spark Mlib 机器学习实践 [2]机器学习 [3]深入浅出K-means算法 http://www.csdn.net/article/2012-07-03/2807073- ...
- Docker Demo on Docker
install docker-machine $ curl -L https://github.com/docker/machine/releases/download/v0.10.0/docker- ...
- SQL注入攻击的常见方式及测试方法
本文主要针对SQL注入的含义.以及如何进行SQL注入和如何预防SQL注入让小伙伴有个了解.适用的人群主要是测试人员,了解如何进行SQL注入,可以帮助我们测试登录.发布等模块的SQL攻击漏洞,至于如何预 ...
- java~接口的共享实体使用Map后更灵活
微服务时代的实体设计 在一个微服务时代,一个实体参数或者返回值,它可能是多服务之前共享的,而这个重复的实体你需要拷贝多份,这是违背DRP原则的,所以我们需要找一种更友好的方式来代替它,它就是Map,我 ...
- 跟王思聪热狗图一样大热的Redis,还不赶紧来Get一下?
前言 不禁喊出一句ig牛逼!哈哈哈 这个话题是不是有点过时了?但说到Redis,真的是被强行灌输的,到处都会被安利Redis,吓得只会mysql和oracle的我,赶紧去get一波.. 数据库种类 关 ...
- 在Xunit中使用FsCheck
目录 编写基于Property-based的单元测试 使用FsCheck编写Property-based测试 在Xunit中使用FsCheck 使用FsCheck编写Model-based测试-待续 ...
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是一种叫“栈 ...
- JDK源码分析(11)之 BlockingQueue 相关
本文将主要结合源码对 JDK 中的阻塞队列进行分析,并比较其各自的特点: 一.BlockingQueue 概述 说到阻塞队列想到的第一个应用场景可能就是生产者消费者模式了,如图所示: 根据上图所示,明 ...