LOJ#3096. 「SNOI2019」数论

如果\(P > Q\)我们把\(P\)和\(Q\)换一下,现在默认\(P < Q\)

这个时候每个合法的\(a_i\)都可以直接落到\(Q\)中,因为\(a_{i} \equiv a_{i} \pmod Q\)这样避免了麻烦

然后呢我们发现每次把\((a_{i} + P) \% Q\)会走成一个圈,我们就要求从\(a_{i}\)开始数\(\lfloor \frac{T - 1- a_{i}}{P} \rfloor + 1\)个圈里\(b_{i}\)的总和

这样的话可以断圈为链,复制两份就可以快速查某一段开始走小于圈长步的总和了

这样的圈一共有\(gcd(P,Q)\)个

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define ba 47
#define MAXN 1000005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 +c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
int P,Q,n,m;
int A[MAXN],B[MAXN];
int sum[MAXN * 2],pos[MAXN * 2],tot;
bool vis[MAXN];
int64 ans,T;
int gcd(int a,int b) {
return b == 0 ? a : gcd(b,a % b);
}
void Solve() {
read(P);read(Q);read(n);read(m);read(T);
int x;
for(int i = 1 ; i <= n ; ++i) {
read(x);A[x] = 1;
}
for(int i = 1 ; i <= m ; ++i) {
read(x);B[x] = 1;
}
if(P > Q) {
swap(P,Q);
for(int i = 0 ; i <= 1000000 ; ++i) swap(A[i],B[i]);
}
int g = gcd(P,Q);
for(int i = 0 ; i < g ; ++i) {
for(int j = 1 ; j <= tot ; ++j) sum[j] = 0;
tot = 0;
int x = i;
while(!vis[x]) {
sum[tot + 1] = B[x] + sum[tot];
pos[tot + 1] = x;
++tot;
vis[x] = 1;
x = (x + P) % Q;
}
int t = tot;
for(int j = 1 ; j <= t ; ++j) {
if(pos[j] < P && A[pos[j]]) {
if(T - 1 - pos[j] >= 0) {
int64 all = (T - 1 - pos[j]) / P + 1;
int64 cnt = all / t;
ans += cnt * sum[t];
int rem = all % t;
if(rem) {
ans += sum[j + rem - 1] - sum[j - 1];
}
}
}
sum[tot + 1] = sum[tot] + B[x];++tot;
x = (x + P) % Q;
}
}
out(ans);enter;
}
int main(){
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

【LOJ】#3096. 「SNOI2019」数论的更多相关文章

  1. Loj #3096. 「SNOI2019」数论

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

  2. 【LOJ】#3098. 「SNOI2019」纸牌

    LOJ#3098. 「SNOI2019」纸牌 显然选三个以上的连续牌可以把他们拆分成三个三张相等的 于是可以压\((j,k)\)为有\(j\)个连续两个的,有\(k\)个连续一个的 如果当前有\(i\ ...

  3. 【LOJ】#3097. 「SNOI2019」通信

    LOJ#3097. 「SNOI2019」通信 费用流,有点玄妙 显然按照最小路径覆盖那题的建图思路,把一个点拆成两种点,一种是从这个点出去,标成\(x_{i}\),一种是输入到这个点,使得两条路径合成 ...

  4. 【LOJ】#3095. 「SNOI2019」字符串

    LOJ#3095. 「SNOI2019」字符串 如果两个串\(i,j\)比较\(i < j\),如果离\(a_{i}\)最近的不同的数是\(a_{k}\),如果\(j < k\)那么\(i ...

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

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

  6. LOJ #2721. 「NOI2018」屠龙勇士(set + exgcd)

    题意 LOJ #2721. 「NOI2018」屠龙勇士 题解 首先假设每条龙都可以打死,每次拿到的剑攻击力为 \(ATK\) . 这个需要支持每次插入一个数,查找比一个 \(\le\) 数最大的数(或 ...

  7. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  8. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  9. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

随机推荐

  1. xgzc— math 专题训练(二)

    费马小定理&欧拉定理 费马小定理: 如果\(p\)是一个质数,而整数\(a\)不是\(p\)的倍数,\(a^{p-1}\equiv1\pmod p\) 欧拉定理: 当\(a\)与\(n\)互质 ...

  2. char 类型的数组转换到CSting

    首先,字符串“abc”在CString的保存格式是‘a’,'\0','b','\0','c','\0','\0','\0'; 从中可以看出它是以‘\0’,'\0',结束的. 当char ch[6]: ...

  3. laravel5.4的laravel-mix踩坑记

    第一个坑,cross-env目录不对 sh: node_modules/cross-env/bin/cross-env.js: No such file or directory 我查了一下cross ...

  4. CRT小键盘输入乱码

    Options --> Session Options --> Terminal --> Emulation --> Modes 去选中 Enable keypad mode ...

  5. HTTP之基本认证机制

    1. 认证 1.1 HTTP 的质询/响应认证框架 HTTP 提供了一个原生的质询/响应(challenge/response)框架,简化了对用户的认证过程. HTTP 的认证模型如下图所示: Web ...

  6. LightGBM两种使用方式

    原生形式使用lightgbm(import lightgbm as lgb) import lightgbm as lgb from sklearn.metrics import mean_squar ...

  7. C#winform和百度API互动-----之读取中js的参数

    上百度的API <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" c ...

  8. kotlin标准委托之阻止属性的赋值操作

    import kotlin.properties.Delegates fun main(arg: Array<String>) { val user = user() user.name= ...

  9. 【极简版】OpenGL 超级宝典(第五版)环境配置 VS2010

    事先声明:该教程仅适用于VS2010环境下超级宝典第五版的配置 第一步:下载示例代码和环境包: 链接:https://pan.baidu.com/s/1llRRQ8ymBgMGuXp5M50pJw 提 ...

  10. 《精通并发与Netty》学习笔记(06 - Apache Thrift使用简介)

    一.概述 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.Thrift是由Facebook开发的,并在2008年捐给了Apache基金会,成为 ...