CF1500B(Div.1) Two chandeliers

基于容斥原理解决的有限制不定方程非负整数解(多重集组合数)计数问题 阅读详情

Label

EXCRT+二分答案

Description

原题链接:https://codeforces.com/problemset/problem/1500/B

抽象题意:给定长度分别为n,mn,mn,m的、序列内元素互不相同的两个不同的正整数序列a,ba,ba,b与正整数kkk,求最小的正整数qqq,满足:

∑i=1q[a((i−1)modn+1)≠b((i−1)modn+1)]≥k\sum_{i=1}^{q}[a_{_{((i-1)modn+1)}}\ne b_{_{((i-1)modn+1)}}]\ge ki=1∑q​[a((i−1)modn+1)​​​=b((i−1)modn+1)​​]≥k

其中1≤n,m≤5×105,1≤k≤1012,1≤ai,bi≤2×max(n,m)1\leq n,m\leq5\times 10^5,1\leq k\leq 10^{12},1\leq a_i,b_i\leq 2\times max(n,m)1≤n,m≤5×105,1≤k≤1012,1≤ai​,bi​≤2×max(n,m).

Solution

由于只有存在ai=bja_i=b_jai​=bj​的情况下才会对答案发生影响(ai≠bja_i\neq b_jai​​=bj​时,其对给定∑\sum∑的贡献一定为000),故对于任意一个∈a\in a∈a的元素aia_iai​,我们只需考虑其是否在bbb内也出现过(设其为bjb_jbj​);如果出现过,是否会出现a((i−1)modn+1)=b((i−1)modn+1)a_{_{((i-1)modn+1)}}=b_{_{((i-1)modn+1)}}a((i−1)modn+1)​​=b((i−1)modn+1)​​的情况。

假设i=xi=xi=x满足上式,那么一定有:
{x≡i(modn)x≡j(modm)\begin{cases}x\equiv i(modn)\\x\equiv j(modm)\end{cases}{x≡i(modn)x≡j(modm)​

其中i,ji,ji,j分别为aia_iai​在数列a,ba,ba,b的位置下标。

有了这个东西,我们便可以利用EXCRT(其实两个方程可以直接利用求EXCRT的原理进行EXGCD推导)求出所有xxx的通解形式,进而得出两盏灯颜色同为aia_iai​(见原题题意)的所有时刻。

至于求qqq的方法,由于qqq越大越容易满足给定条件,故我们直接进行答案越小越优的二分答案即可(此题答案不会爆long long)。在二分答案的check函数里,当q=midq=midq=mid时,我们枚举所有aia_iai​,利用之前求得的xix_ixi​,计算第1∼q1\sim q1∼q天内两盏灯颜色同为aia_iai​的天数did_idi​,最后直接将mid−∑i=1ndimid-\sum_{i=1}^{n}d_imid−∑i=1n​di​与kkk比较即可。>k>k>k则说明最优答案≤mid\leq mid≤mid,反之则大于。

复杂度:O(nlogV)O(nlogV)O(nlogV),其中VVV为可能的最大答案(此题的复杂度来源于二分答案,由于EXGCD可以只进行一次,所以整个求xix_ixi​的过程复杂度为O(n)O(n)O(n))。

Code

#include<cstdio>
#include<iostream>
#define ri register int
#define ll long long
using namespace std;

const int MAXN=1e6+20;
int N,M,cola[MAXN],colb[MAXN];
ll K,plaa[MAXN<<1],plab[MAXN<<1],ans[MAXN],A,B,Mi,G,C,x,y,xi,yi,l,r,mid,nowsame;

ll Gcd(ll a,ll b) { return ((b==0)?a:Gcd(b,a%b)); }
ll Lcm(ll a,ll b) { return (a/Gcd(a,b))*b; }
ll Msc(ll a,ll b,ll MOD)
{
	ll tot=0;
	for(;b;b>>=1,a=(a+a)%MOD) 
		if(b&1)	tot=(tot+a)%MOD; 
	return tot;
}

void Exgcd(ll a,ll b)
{
	if(b==0) { x=1,y=0; return; }
	Exgcd(b,a%b);
	xi=x,yi=y;
	x=yi,y=xi-(a/b)*yi;
}

bool check(ll tot)
{
	nowsame=0;
	for(ri i=1;i<=N;++i)
	{
		if(ans[i]==0||ans[i]>tot)	continue;
		nowsame+=1+(tot-ans[i])/Mi;
	}
	if(tot-nowsame>=K)	return true;
	return false;
}

int main()
{
	scanf("%d%d%lld",&N,&M,&K);
	for(ri i=1;i<=N;++i)
	{
		scanf("%d",&cola[i]);
		plaa[cola[i]]=(ll)i; 
	}
	for(ri i=1;i<=M;++i)
	{
		scanf("%d",&colb[i]);
		plab[colb[i]]=(ll)i; 		
	}
	Mi=Lcm(N,M);
	Exgcd(N,M);
	for(ri i=1;i<=N;++i)
	{
		if(plab[cola[i]]==0LL)	continue;
		ans[i]=plaa[cola[i]]; C=plab[cola[i]]-ans[i]; G=Gcd(N,M);
		if(C%G!=0) { ans[i]=0; continue; }
		x=(x%(M/G)+(M/G))%(M/G);
		ans[i]=(ans[i]+Msc((C/G)%Mi,Msc(N,x,Mi),Mi))%Mi;
		if(ans[i]>0)	ans[i]%=Mi;
		if(ans[i]<0)	ans[i]=(ans[i]%Mi+Mi)%Mi;
		if(ans[i]==0)	ans[i]=Mi;
	}
	l=1,r=1e18;
	while(l<r)
	{
		mid=(l+r)>>1;
		if(check(mid))	r=mid;
		else	l=mid+1;
	}
	if(check(l))	cout<<l;
	else	cout<<"-1";
	return 0;
}
P1072 [NOIP2009 提高组] Hankson 的趣味题 gcd与lcm的算术基本定理表现形式 阅读详情

相关推荐

遥感大模型核心技术之自监督预训练技术研究(2025年9月版)

本文系统探讨了自监督预训练技术在遥感大模型构建中的核心作用。随着遥感数据进入"大数据"时代,传统监督学习面临"数据丰富、标签贫乏"的瓶颈,而自监督预训练通过设计代理任务从无标签数据中学习特征表示,成为驱动大模型发展的关键引擎。文章分析了遥感领域对自监督预训练的三大独特挑战:多源异构性、地理空间约束和时空动态性,并提出了针对性解决方案:掩码自编码(MAE)技术及其演进、地理对比学习与多模态融合、位置感知预训练与多任务学习。

panshengwu的博客 842

CF1500B. Two chandeliers(扩展欧几里得算法)

https://codeforces.com/contest/1500/problem/B B. Two chandeliers time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vasya is a CEO of a big construction company. And as any other big boss

yaoct的博客 733

【问题解决】解决 Python `PermissionError` 权限不足:文件/进程/端口全场景修复

本文总结了Python程序中常见的权限问题及解决方案,包括文件、进程和端口权限错误。文件权限问题通常由文件占用、权限不足或路径错误引起;进程问题多因权限不足或系统限制;端口问题则与端口占用、防火墙或特权端口相关。解决方案提供了详细的代码实现:文件权限管理器类(FilePermissionManager)包含检查权限(check_permission)、修复权限(fix_permission)、安全写入(safe_write)和安全删除(safe_delete)等方法,通过异常处理和临时文件等技术确保操作安全

博客 357

[CF1500B]Two chandeliers

不读题 = 吃药不看说明书 = 头孢 + 酒

七代目鸽影 243

【CAD】【手把手带你写一个DXF&JAVA解析框架】02——整理DXF元数据实体类,涵盖重要属性与对照组码

本文系统梳理了DXF文件解析中的核心元数据类,重点分析了Tables段(图层、块记录)、Blocks段和Entities段的关键数据结构。通过详细的组码说明和对照代码实现,阐述了图层定义(DXFLayer)、块记录(DXFBlockRecord)、应用程序标识(DXFAppId)等表对象的属性构成;同时解析了直线(DXFLine)、多段线(DXFLwPolyLine)、圆弧(DXFArc)、文字(DXFText)等实体类的几何特征与属性定义。文章还构建了顶点(Vertex)、基类(DXFEntity、DXF

Wonder ZH 267

zemax---光学设计基础概念篇(持续更新中)

光学设计相关知识概念

u011699626的博客 1145

CF1501 D ---数论(excrt+二分)

Vasya is a CEO of a big construction company. And as any other big boss he has a spacious, richly furnished office with two crystal chandeliers. To stay motivated Vasya needs the color of light at his office to change every day. That’s why he ordered both

weixin_51204962的博客 473

详解AUTOSAR:专栏总述

本专栏系统介绍AUTOSAR规范及车用控制器软件开发,内容覆盖基础架构、SWC/RTE、通信栈、诊断、存储、安全、看门狗、工具链、环境配置与项目实战,并持续更新各模块的集成机制与工程要点。

不脱发的程序猿 3922

Codeforces 707(Div2) D - Two chandeliers (二分 + 拓展中国剩余定理)

题意: 很长一大串的题意,可以化简为给定你两个序列,每个序列中都不会有重复的数,然后这两个序列都可以分别看做是可无限延伸循环的,然后给定你一个数字kkk,iii从111开始,问你iii到达多少后,前iii对ai,bia_i,b_iai​,bi​中,有kkk个位置ai≠bia_i \neq b_iai​​=bi​。 很明显影响iii因素是有多个位置他们的ai=bia_i = b_iai​=bi​,假如对于一个值valvalval,它在aaa中位置是xxx,在bbb中的位置时yyy,那么也就是找到一个最小的.

forward77 623

Vue3 - Element Plus 树形表格组件 el-table 一键全部展开折叠功能,支持动态数据及懒加载点击父级才去请求的场景,Tree树状表格每行带有children的表格全部收起和折叠!

vue3,element-plus,表格Table组件,el-table,怎样一键展开/收起,一键展开或折叠树形表格,如何通过按钮来实现全部展开,不生效,一键折叠或展开表格,表格children嵌套,带有子集,多级表格,懒加载,动态数据,table表格的children通过后端请求过来的怎么一键展开请求数据呢,表格如何一键展开和折叠,怎么使用,教程,树形数据table全部展开和折叠,一键展开或折叠树形表格,点击展开接口获取数据,toggleRowExpansion,树形表格懒加载与全部折叠,深层多级,复杂,

🏆 前端领域优质创作者 6802

基于STM32F103C8T6的智能蓝牙手环系统设计与实现

摘要:本文设计并实现了一款基于STM32F103C8T6单片机的智能蓝牙手环系统。该系统集成了ADXL345加速度计、DS18B20温度传感器、plusesennor心率模块和BT06蓝牙模块,实现了心率(±2bpm)、体温(±0.5℃)、步数(±3%)等健康数据的实时监测与显示。通过OLED屏提供人机交互界面,支持蓝牙APP远程控制,具备自动步数清零、异常提醒等功能。测试表明系统各项功能均达到设计要求,响应时间0.1-0.5秒,心率检测准确率98%,体温检测准确率99%,功耗50mA(工作)/10mA(待

3254968421的博客 205

Codeforces Round #707 D.Two chandeliers(二分+扩展中国剩余定理)

题意:

the best 的博客 361

【ESP32摄像头开发实例】-视频流接入Home Assistant

在这个项目中,我们将使用ESP32-CAM板构建一个IP监控摄像头。ESP32摄像头将托管一个视频流媒体网络服务器,您可以使用网络中的任何设备进行访问。

视觉与物联智能 789

线性筛(P3383 【模板】线性筛素数)

线性筛学习

guapi2333的博客 863

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

P2158 [SDOI2008]仪仗队&&欧拉函数的求法

欧拉函数(此处将此题作为欧拉函数模板套路题分析)

guapi2333的博客 284

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

P1641 [SCOI2010]生成字符串

这个题的公式: 具体做法在洛谷的题解中描述的十分详细。 但我们要注意的一点的是:由于答案取模,故直接对上式的每一项取模后在相减的话,容易出现负数(显然,a&gt;b并不代表a%p &gt; b%p)。这时的答案应该是:。即对以上的ans做如下操作: 整个的题的处理方法就十分明了了。 代码: #include&lt;cstdio&gt; #include&lt;iostream&...

guapi2333的博客 270

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

(杜教筛)P4213 【模板】杜教筛(Sum)

杜教筛基本原理及一个模板题

guapi2333的博客 249

P2398 GCD SUM

欧拉函数

guapi2333的博客 242

利用容斥解决欧拉函数相关问题&&[NOI2010] 能量采集

利用容斥解决欧拉函数相关问题&&[NOI2010] 能量采集

guapi2333的博客 241

CF1068B LCM

Problem:给定一个正整数。问:当正整数时,有多少种不同的正整数。 先让我们化简一下题目给定的式子: 由于的值域远远大于,所以说答案就是能整除的数的个数。 Code: #include&lt;cstdio&gt; #include&lt;iostream&gt; using namespace std; long long b,ans; int main() { cin&...

guapi2333的博客 239

HDU4944 FSF’s game

利用欧拉函数性质普通莫比乌斯反演+对数论分块求和的筛法优化

guapi2333的博客 228

数论分块&&P2261 [CQOI2007]余数求和

数论分块基础知识及P2261 Solution

guapi2333的博客 226

P3306 [SDOI2013] 随机数生成器

简单BSGS+简单exgcd

guapi2333的博客 222

P1829 [国家集训队]Crash的数字表格

经典莫比乌斯反演转化gcd(i,j)P3768弱化版)

guapi2333的博客 218

P2257 YY的GCD

灵活变换求和次序的普通莫比乌斯反演

guapi2333的博客 208
上一篇: P2398 GCD SUM
下一篇: P4774 [NOI2018] 屠龙勇士
guapi2333
博客等级 码龄9年 7粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值