【LOJ#3096】[SNOI2019]数论

题面

LOJ

题解

考虑枚举一个\(A\),然后考虑有多少个合法的\(B\)。

首先这个数可以写成\(a_i+kP\)的形式,那么它模\(Q\)的值成环。

所以我们预处理每个环内有多少个合法的\(b\),再把\(b\)按照访问顺序记录一下,那么对于每一个\(a\)就可以直接算答案了。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
#define MAX 1001000
inline ll read()
{
ll x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int A[MAX],B[MAX],ID[MAX];
vector<int> G[MAX];
int P,Q,D,n,m;ll T,ans;
int main()
{
P=read();Q=read();n=read();m=read();T=read()-1;
for(int i=1;i<=n;++i)A[i]=read();
for(int i=1;i<=m;++i)B[read()]=1;
D=__gcd(P,Q);
for(int i=0;i<D;++i)
{
int u=i,cnt=0;
while(!cnt||u!=i)
{
ID[u]=++cnt;
if(B[u])G[i].push_back(cnt);
u=(u+P)%Q;
}
}
ll c=1ll*P*Q/D;
for(int i=1;i<=n;++i)
{
ll cir=(T-A[i])/c;
ans+=cir*(int)(G[A[i]%D].size());
ll st=(T-cir*c-A[i])/P;
int L=ID[A[i]],R=ID[(A[i]+st*P)%Q];
if(L<=R)
{
ans+=upper_bound(G[A[i]%D].begin(),G[A[i]%D].end(),R)-G[A[i]%D].begin();
ans-=upper_bound(G[A[i]%D].begin(),G[A[i]%D].end(),L-1)-G[A[i]%D].begin();
}
else
{
swap(L,R);ans+=G[A[i]%D].size();
L+=1;R-=1;if(L>R)continue;
ans-=upper_bound(G[A[i]%D].begin(),G[A[i]%D].end(),R)-G[A[i]%D].begin();
ans+=upper_bound(G[A[i]%D].begin(),G[A[i]%D].end(),L-1)-G[A[i]%D].begin();
}
}
printf("%lld\n",ans);
return 0;
}

【LOJ#3096】[SNOI2019]数论的更多相关文章

  1. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  2. 【LG5330】[SNOI2019]数论

    [LG5330][SNOI2019]数论 题面 洛谷 题目大意: 给定集合\(\mathbb {A,B}\) 问有多少个小于\(T\)的非负整数\(x\)满足:\(x\)除以\(P\)的余数属于\(\ ...

  3. 洛谷$P5330\ [SNOI2019]$数论 数论

    正解:数论 解题报告: 传送门$QwQ$ ,,,这题还蛮妙的$QwQ$(,,,其实所有数论题对我来说都挺妙的$kk$然后我真的好呆昂我理解了好久$QAQ$ 考虑先建$Q$个点,编号为$[0,Q)$,表 ...

  4. [SNOI2019]数论

    题目 考虑对于每一个\(a_i\)计算有多少个\(0<x\leq T-1\)满足\(x\equiv a_i(mod\ P)\)且\(x\ mod\ Q \in B\) 显然\(x=a_i+k\t ...

  5. Luogu P5330 [SNOI2019]数论

    题目 如果\(P>Q\)的话我们先交换一下\(P,Q\). 我们先枚举所有满足第一个条件的数,对于\(x\equiv a_i(mod\ P)\),设\(x=a_i+kP(k\in[0,\lflo ...

  6. LOJ#3097 [SNOI2019]通信 最小费用最大流+cdq分治/主席树/分块优化建图

    瞎扯 我们网络流模拟赛(其实是数据结构模拟赛)的T2. 考场上写主席树写自闭了,直接交了\(80pts\)的暴力,考完出来突然发现: woc这个题一个cdq几行就搞定了! 题意简述 有\(n\)个哨站 ...

  7. 【LOJ】#3096. 「SNOI2019」数论

    LOJ#3096. 「SNOI2019」数论 如果\(P > Q\)我们把\(P\)和\(Q\)换一下,现在默认\(P < Q\) 这个时候每个合法的\(a_i\)都可以直接落到\(Q\) ...

  8. 【LOJ#3097】[SNOI2019]通信(费用流)

    [LOJ#3097][SNOI2019]通信(费用流) 题面 LOJ 题解 暴力就直接连\(O(n^2)\)条边. 然后分治/主席树优化连边就行了. 抄zsy代码,zsy代码是真的短 #include ...

  9. 【LOJ#3095】[SNOI2019]字符串(后缀数组)

    [LOJ#3095][SNOI2019]字符串(后缀数组) 题面 LOJ 题解 首先画图看看如何比较两个串的大小,发现这个东西等价于求两个相邻的后缀的\(LCP\). 一个做法是求出\(SA\),然后 ...

随机推荐

  1. c#封装DBHelper类

    public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> None, /// <s ...

  2. 解决html代码文本复制问题,js技术

    实例代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <scr ...

  3. 深入理解Git的实现原理

      0.导读   本文适合对git有过接触,但知其然不知其所以然的小伙伴,也适合想要学习git的初学者,通过这篇文章,能让大家对git有豁然开朗的感觉.在写作过程中,我力求通俗易懂,深入浅出,不堆砌概 ...

  4. 测者的测试技术手册:分清Java的Override和Overload

    Java的Override和OverloadOverride重写:子类对父类的允许访问的方法实现过程重新编写,但是 不可改变返回值和入参.重弄写的规则: 参数列表必须完全与被重写方法的相同: 返回类型 ...

  5. ext前后台数据传输的标准化

    一.标准化的数据传输是什么 这里所说的标准化主要是指,使用代理提交数据时,格式必须统一化.标准化,而服务器返回的数据格式也必须是标准化的数据. 简言之,使用代理提交数据时,前台--->后台,后台 ...

  6. 好代码是管出来的——使用GitHub实现简单的CI/CD

    软件开发一般来说是一项团队作业,在本系列文章开始就提到过软件的编码是由一个团队“并行”完成的,为了保证编码任务正常完成,首先引入版本控制工具来完成代码管理,为了保证代码质量引入了代码分析器以及代码测试 ...

  7. mysqlbinlog 工具分析binlog日志

    MySQL的binlog 日志对于生产环境非常有用,任何时间对数据库的修改都会记录在binglog中:当数据发生增删改,创建数据库对象都会记录到binlog中,数据库的复制也是基于binlog进行同步 ...

  8. .net core 命令行(仅作记录)

    命令大全:dotnet 命令 创建NuGet包:如何使用 .NET Core 命令行接口 (CLI) 工具创建 NuGet 包

  9. VS Code常用快捷键大全

    常用 General 按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick O ...

  10. 在centos中搭建基于nginx的apt源服务器,整合yum源和apt源在一台服务器

    1.首先关闭防护墙或者设置规则通过且关闭selinux 2.nginx-1.14.2版本(编译安装)-自定义安装路径 3.开启nginx目录浏览 以上步骤请参考前文:https://www.cnblo ...