尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
P5330 [SNOI2019] 数论
题意给出正整数P , Q , T P,Q,TP,Q,T大小为n nn的整数集A AA和大小为m mm的整数集B BB现在需要求∑ i 0 T − 1 [ ( i m o d P ) ∈ A ∧ ( i m o d Q ) ∈ B ] \sum_{i0}^{T-1}[(i\bmod P) \in A \land (i\bmod Q) \in B]∑i0T−1​[(imodP)∈A∧(imodQ)∈B]。n ≤ 10 6 n\le10^6n≤106p , q ≤ 10 6 p,q\le10^6p,q≤106T ≤ 10 1 8 T\le10^18T≤1018。思路设g gcd ⁡ ( P , Q ) g\gcd(P,Q)ggcd(P,Q)对于一对( i ∈ A , j ∈ B ) (i\in A,j\in B)(i∈A,j∈B)如果i ≢ j ( m o d g ) i\not\equiv j\pmod gi≡j(modg)则不存在x xx满足x ≡ i ( m o d P ) , x ≡ j ( m o d Q ) x\equiv i\pmod P,x\equiv j\pmod Qx≡i(modP),x≡j(modQ)反之如果i ≡ j ( m o d g ) i\equiv j\pmod gi≡j(modg)则在[ 0 , l c m ( P , Q ) ) [0,lcm(P,Q))[0,lcm(P,Q))中存在且仅存在一个x xx满足x ≡ i ( m o d P ) , x ≡ j ( m o d Q ) x\equiv i\pmod P,x\equiv j\pmod Qx≡i(modP),x≡j(modQ)。把m o d g \bmod gmodg相等的值领出来分开计算。按照l c m ( P , Q ) lcm(P,Q)lcm(P,Q)把[ 0 , T ) [0,T)[0,T)分成很多块整块是好计算的考虑计算散块。以P 4 , Q 6 P4,Q6P4,Q6为例计算≡ 1 ( m o d 2 ) \equiv1\pmod2≡1(mod2)的部分。mod 4mod 6113315311335发现当≡ 1 ( m o d 4 ) \equiv1\pmod4≡1(mod4)时m o d 6 \bmod6mod6的结果是1 , 5 , 3 , … 1,5,3,\dots1,5,3,…当≡ 3 ( m o d 4 ) \equiv3\pmod4≡3(mod4)时m o d 6 \bmod6mod6的结果是3 , 1 , 5 , … 3,1,5,\dots3,1,5,…找到规律当模P PP的余数增加g gg时模Q QQ的最小循环节会把最后几位搬到前面而每次被搬到前面的数的个数mis可以通过在环上找到( i g ) m o d Q (ig)\bmod Q(ig)modQ的位置来计算即mis环长-pos。根据这个规律我们给每个值标号枚举模P PP的余数v vv开个桶判断是否在A AA中同时在环上用前缀和快速统计连续区间内有多少个值在B BB中从而计算散块中的答案。代码// Problem: P5330 [SNOI2019] 数论// Contest: Luogu// URL: https://www.luogu.com.cn/problem/P5330// Memory Limit: 256 MB// Time Limit: 2000 ms//// Powered by CP Editor (https://cpeditor.org)#includebits/stdc.husingnamespacestd;namespaceIO{templatetypenameTinlinevoidread(Tx){x0;charcgetchar();boolf0;while(!isdigit(c))c-?f1:0,cgetchar();while(isdigit(c))xx*10c-0,cgetchar();f?x-x:0;}templatetypenameTinlinevoidwrite(T x){if(x0){putchar(0);return;}x0?x-x,putchar(-):0;shortst[50],top0;while(x)st[top]x%10,x/10;while(top)putchar(st[top--]0);}inlinevoidread(charc){cgetchar();while(isspace(c))cgetchar();}inlinevoidwrite(charc){putchar(c);}inlinevoidread(strings){s.clear();charc;read(c);while(!isspace(c)~c)sc,cgetchar();}inlinevoidwrite(string s){for(inti0,lens.size();ilen;i)putchar(s[i]);}templatetypenameTinlinevoidwrite(T*x){while(*x)putchar(*(x));}templatetypenameT,typename...T2inlinevoidread(Tx,T2...y){read(x),read(y...);}templatetypenameT,typename...T2inlinevoidwrite(constT x,constT2...y){write(x),putchar( ),write(y...),sizeof...(y)1?putchar(\n):0;}}usingnamespaceIO;#defineLLlonglongconstintmaxn1000010;intp,q,n,m,sum[maxn];LL t,ans;boolina[maxn],inb[maxn],app[maxn];vectorintvta[maxn],vtb[maxn],vt;signedmain(){read(p,q,n,m,t);intg__gcd(p,q);LL l1ll*p*q/g;for(inti1;in;i){intv;read(v);vta[v%g].push_back(v);ina[v]1;}for(inti1;im;i){intv;read(v);vtb[v%g].push_back(v);inb[v]1;}for(inti0;ig;i){anst/l*vta[i].size()*vtb[i].size();vt.clear();vt.push_back(i);LL nwi;while(1){nwp;if(nw%qvt[0])break;vt.push_back(nw%q);}sum[0]inb[vt[0]];for(inti1;ivt.size();i)sum[i]sum[i-1]inb[vt[i]];intmis;for(intwz1;wzvt.size();wz)if(vt[wz](ig)%q)misvt.size()-wz;LL syt%l;if(sy0)continue;sy--;intwvt.size()mis;for(LL vi;1;vg){if(app[v%p])break;app[v%p]1;w-mis;w(wvt.size())%vt.size();intcnt(sy-v)/p1;if(vsy)cnt0;if(cnt0)continue;intghvt.size()-w;if(ina[v]0)continue;if(ghcnt)anssum[wcnt-1]-(w?sum[w-1]:0);elseanssum[vt.size()-1]-(w?sum[w-1]:0)sum[cnt-gh-1];}for(LL vi;1;vg){if(app[v%p]0)break;app[v%p]0;}}write(ans);return0;}
RELATED

相关推荐

P2483 【模板】k 短路 / [SDOI2010] 魔法猪学院

P2483 【模板】k 短路 / [SDOI2010] 魔法猪学院

题意 给出一张 nnn 个点,mmm 条边的有向带权图,求出最大的 kkk 满足前 kkk 短路径加长度起来大于 EEE。 n≤5010n\le5010n≤5010,m≤2105m\le2\times10^5m≤2105,E≤107E\le10^7E≤107,边权 w≤Ew\le Ew≤E。 思路 先用…

📅 2026/7/12 18:50:46
深入解析AMD Ryzen SMU调试工具:从硬件底层到性能优化的完整指南

深入解析AMD Ryzen SMU调试工具:从硬件底层到性能优化的完整指南

深入解析AMD Ryzen SMU调试工具:从硬件底层到性能优化的完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: …

📅 2026/9/6 21:55:08
4.19华为OD机试真题 新系统 - 分辨率排序  (JavaPyCC++JsGo)

4.19华为OD机试真题 新系统 - 分辨率排序 (JavaPyCC++JsGo)

分辨率排序 2026 华为OD机试真题 4月19日华为OD上机新系统考试真题 100 分题型 点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 双机位C卷 真题题库目录|全覆盖题库 逐点算法考点详解 题目描述 4K、2K、1080P、720P清晰度定义(清晰度…

📅 2026/7/10 16:26:38
MORE NEWS

更多资讯

📰

G-Helper 配置重置指南:模式失灵、风扇不听使唤时,3 级修复让它重新可用

G-Helper 配置重置指南:模式失灵、风扇不听使唤时,3 级修复让它重新可用 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, P…

📰

YOLO26:面向2026边缘部署的小目标检测与SSM重构实践

1. YOLO不是“快过时”的代名词,而是检测范式演进的活标本很多人看到“2026年YOLO还有哪些创新点可以做?”这个标题,第一反应是:YOLOv5都跑满三年了,v8刚稳定没多久,v9还在社区吵参数设计,v10连…

📰

Apache Airflow 依赖与 Extras 管理全解:从 uv Workspace 到约束文件(Constraints)的工程实践

Apache Airflow 依赖与 Extras 管理全解:从 uv Workspace 到约束文件(Constraints)的工程实践 【免费下载链接】airflow Apache Airflow - A platform to programmatically author, schedule, and monitor workflows 项目地址: https://git…

📰

Spring Cloud 2022核心升级与微服务架构实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

G-Helper 新手指南:华硕笔记本轻量级控制中心的 6 个实用设置

G-Helper 新手指南:华硕笔记本轻量级控制中心的 6 个实用设置 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenb…

📰

Linera Playground:面向 Linera 应用的浏览器内 GraphQL 调试台

Linera Playground:面向 Linera 应用的浏览器内 GraphQL 调试台 【免费下载链接】linera-protocol Main repository for the Linera protocol 项目地址: https://gitcode.com/GitHub_Trending/li/linera-protocol 导读 Linera Playground 是 Linera 协议仓库…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬