尧图网络 高端网站定制 · 原创设计
免费咨询热线
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/10/29 9:54:54
深入解析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/11/8 23:10:02
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/10/8 3:53:16
MORE NEWS

更多资讯

📰

沙湾高压电工证怎么报名?工地太忙根本没时间复习考试

沙湾高压电工证怎么报名?工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多电工朋友的共同烦恼。尤其是那些已经在一线工作多年、经验丰富的高压电工,面对考试复习常常感到无从下手。其实, 沙湾高压电工证…

📰

电工证挂靠社保多少钱?别再被中介坑了,这才是正规报考攻略

电工证挂靠社保多少钱?别再被中介坑了,这才是正规报考攻略 不知道去哪报名怕被中介坑,特别是电工证挂靠社保这种事,很多电工朋友一上来就被各种高价培训班、挂靠公司忽悠得晕头转向,甚至花了冤枉钱还拿不到证。现在咱们直接说重点,电工证挂靠社保多少钱…

📰

曲靖电工证考试费用及官方报名入口全解析:别让培训费打水漂

曲靖电工证考试费用及官方报名入口全解析:别让培训费打水漂 怕考不过白交培训费?现在报名电工证考试,很多人最怕的就是花了钱、花了时间,结果还是没通过。尤其是曲靖地区的电工学员,考试费用、考试内容、通过率都是绕不开的问题。如果你还在为【曲靖电工…

📰

特种工29年工龄在电子证书复审流程与实操建议

特种工29年工龄在电子证书复审流程与实操建议 证书过期了不知道怎么复审延期,你是不是也遇到过这种事?特种工29年工龄在,很多人以为工龄长就等于经验足、证书稳当,但现实是,特种作业操作证不是终身有效的, 电子证书…

📰

新野县电工证办理怎么报名 外省证能转吗

新野县电工证办理怎么报名 外省证能转吗 之前考的证在外省能不能转过来?这个问得好,很多在新野县的朋友都是拿着外地证过来咨询的。其实这个事儿,关键看你有没有“全国统一”这个关键词。 特种作业操作证…

📰

之前考的证在外省能不能转过来 电工证现在能不能考多少钱全解析

之前考的证在外省能不能转过来 电工证现在能不能考多少钱全解析 之前考的证在外省能不能转过来?很多老电工都有这样的疑问,特别是像你这样在濮阳做中小施工企业的负责人,经常需要跨省施工,证书的有效性成了刚需。现在很多人在问“ 电工证现在能不能考…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬