【LG5330】[SNOI2019]数论

题面

洛谷

题目大意:

给定集合\(\mathbb {A,B}\)

问有多少个小于\(T\)的非负整数\(x\)满足:\(x\)除以\(P\)的余数属于\(\mathbb A\)且\(x\)除以\(Q\)的余数属于\(\mathbb B\)。

其中\(1\leq |\mathbb A|,|\mathbb B|\leq 10^6,1\leq P,Q\leq 10^6,1\leq T\leq 10^{18}\)。

题面

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

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

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

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
inline int gi() {
register int data = 0, w = 1;
register char ch = 0;
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') w = -1, ch = getchar();
while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
return w * data;
}
const int MAX_N = 1e6 + 5;
int P, Q, N, M, a[MAX_N], b[MAX_N];
long long T, len, p[MAX_N];
int val[MAX_N], w[MAX_N], col[MAX_N], pos[MAX_N], cnt;
vector<int> cir[MAX_N], sum[MAX_N];
int dfs(int x) {
if (col[x]) return 0;
col[x] = cnt, cir[cnt].push_back(x);
return val[x] + dfs((x + P) % Q);
}
int solve(int l, int x) { return sum[col[x]][pos[x] + l] - sum[col[x]][pos[x]]; }
int main () {
#ifndef ONLINE_JUDGE
freopen("cpp.in", "r", stdin);
#endif
P = gi(), Q = gi(), N = gi(), M = gi(); scanf("%lld", &T);
for (int i = 1; i <= N; i++) a[i] = gi();
for (int i = 1; i <= M; i++) b[i] = gi();
if (P > Q) swap(P, Q), swap(N, M), swap(a, b);
len = Q / __gcd(P, Q);
for (int i = 1; i <= M; i++) val[b[i]] = 1;
for (int i = 1; i <= N; i++) p[i] = (T - 1 - a[i]) / P;
for (int i = 0; i < Q; i++) if (!col[i]) ++cnt, w[cnt] = dfs(i);
for (int i = 1; i <= cnt; i++) {
for (int j = 0; j < (int)cir[i].size(); j++) pos[cir[i][j]] = j;
for (int j = 0, sz = cir[i].size(); j < sz - 1; j++) cir[i].push_back(cir[i][j]);
sum[i].push_back(val[cir[i][0]]);
for (int j = 1; j < (int)cir[i].size(); j++) sum[i].push_back(sum[i][j - 1] + val[cir[i][j]]);
}
long long ans = 0;
for (int i = 1; i <= N; i++) {
ans += p[i] / len * w[col[a[i]]];
ans += solve(p[i] % len, a[i]) + val[a[i]];
}
printf("%lld\n", ans);
return 0;
}

【LG5330】[SNOI2019]数论的更多相关文章

  1. 【LOJ#3096】[SNOI2019]数论

    [LOJ#3096][SNOI2019]数论 题面 LOJ 题解 考虑枚举一个\(A\),然后考虑有多少个合法的\(B\). 首先这个数可以写成\(a_i+kP\)的形式,那么它模\(Q\)的值成环. ...

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

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

  3. [SNOI2019]数论

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

  4. Luogu P5330 [SNOI2019]数论

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

  5. Loj #3096. 「SNOI2019」数论

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

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

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

  7. [日常] SNOI2019场外VP记

    SNOI2019场外VP记 教练突然说要考一场别省省选来测试水平...正好还没看题那就当VP咯w... Day 1 八点开题打 .vimrc. 先看了看题目名...一股莫名鬼畜感袭来... 怎么T1就 ...

  8. Codeforces Round #382 Div. 2【数论】

    C. Tennis Championship(递推,斐波那契) 题意:n个人比赛,淘汰制,要求进行比赛双方的胜场数之差小于等于1.问冠军最多能打多少场比赛.题解:因为n太大,感觉是个构造.写写小数据, ...

  9. NOIP2014 uoj20解方程 数论(同余)

    又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...

随机推荐

  1. 无聊系列 - C#中一些常用类型与java的类型对应关系

    昨天在那个.NET转java群里,看到一位朋友在问C#的int 对应java的哪个对象,就心血来潮,打算写一下C#中一些基础性的东西,在java中怎么找. 1. 基础值类型 如:int,long,do ...

  2. centos 安装python3.7

    先安装依赖包: yum -y install bzip2 bzip2-devel ncurses openssl openssl-devel openssl-static xz lzma xz-dev ...

  3. 为什么Linux 普通用户在虚拟机界面可以reboot 用ssh 不能reboot

    应该是有 类似的权限控制. 如果是 localhost , 那么普通用户允许重启. 如果不是localhost,  比如ssh远程的,必须验证root权限.

  4. Spring源码系列 — Resource抽象

    前言 前面两篇介绍了上下文的启动流程和Environemnt的初始化,这两部分都是属于上下文自身属性的初始化.这篇开始进入Spring如何加载实例化Bean的部分 - 资源抽象与加载. 本文主要从以下 ...

  5. 基于Spark的电影推荐系统(推荐系统~1)

    第四部分-推荐系统-项目介绍 行业背景: 快速:Apache Spark以内存计算为核心 通用 :一站式解决各个问题,ADHOC SQL查询,流计算,数据挖掘,图计算 完整的生态圈 只要掌握Spark ...

  6. 使用Git Bash在码云上上传和下载代码

    前提是在码云上已经新建一个空的项目 1.新建一个目录,存放下载下来的项目,我在D盘新建了一个"gitspace"文件夹,用来存放下载下来的项目 2.进入刚刚新建的文件夹,即进入&q ...

  7. 2018-8-10-WPF-checkbox文字下掉

    原文:2018-8-10-WPF-checkbox文字下掉 title author date CreateTime categories WPF checkbox文字下掉 lindexi 2018- ...

  8. 2019-11-26-C#-判断方法是否被子类重写

    原文:2019-11-26-C#-判断方法是否被子类重写 title author date CreateTime categories C# 判断方法是否被子类重写 lindexi 2019-11- ...

  9. 关于前端ajax请求url为何添加一个随机数

    一.起因 我在做爬虫的时候发现很多网站上都在url上加一个随机数或者时间戳一开始我以为是啥加密后面发现其实他在后台解析的时候也不需要不排除有些网站他反爬就需要一个时间戳,那他加个随机数是做啥子 二.查 ...

  10. tomcat的基本应用

    1.JVM基本介绍 JAVA编译型 ---> 编译 C 编译型---> linux --->编译一次 windows --->编译一次 macos ubuntu 跨平台 移值型 ...