Pro Tanto Quid Ret|

Schucking_Sattin

园龄:2年11个月粉丝:13关注:28

2023-03-03 10:06阅读: 49评论: 1推荐: 0

AGC061C First Come First Serve

AGC061C First Come First Serve(2697)

洛谷:AGC061C First Come First Serve

Atcoder:AGC061C First Come First Serve

Problem

n 个人来过,第 i 个人在 ai 时刻来在 bi 时刻走,每个人可以在来时或走时登记,问可能的登记顺序有多少种。

n5×105ai,bi 互不相同,i<n,ai<ai+1,bi<bi+1

Solution

直接考虑最终的合法排列,然后不会做,然后问波特, 于是将最终的排列对应到每个人选择在左端点或者右端点登记的方案。

n 条线段按左端点从小到大排序。

01 数列 C 表示上述方案,Ci0 表示第 i 条线段选择左端点,否则选右端点。

为了使排列与 C 一一对应,我们需要考虑一种构造 C 的方式。

若存在 C1,C2 满足同一个排列,构造 Ci=min(C1i,C2i)

即执行能取左端点就取左端点的策略。

关于正确性,bottyl 给出了一种很好的理解方式:考虑 C1C2 第一个不同的位置 i,由于之前的填法已经确定,在这里既能填 0 又能填 1 的话,说明之前选到的点均不在第 i 条线段的内部,之后选到的点也不在第 i 条线段的内部。将这个位置强行钦定为 0,则第 i 条线段将不会决定性地影响之后的选取,即之后枚举的线段不管选左端点还是右端点,相对顺序都在第 i 条线段之后(注意线段按照左端点排序)。反之,如果第 i 条线段只能填 0 或只能 1,它一定不会是我们强行钦定的结果,而是自然选择的结果。

重要思想是:强行钦定不能影响自然选择

考虑第一个不同 也是分析中重要的一点,从前往后推保证了转化的正确性。

所以问题转化为合法的 C 数列计数(经最小值构造后的)。

fi 表示考虑前 i 条线段填 C 的方案数。

对于一个线段 x,记 Lx 为与 x 相交的最左端线段,Rx 为与 x 相交的最右端线段。当 Lxx1 这些线段均选左端点,x+1Rx 均选右端点时,x 既可以选左端点也可以选右端点,因此会被计重。去重方法是:在 Rx 的地方对 fRx 减去 fLx1

转移很简单,就是 fi=2×fi1

code AGC061C First Come First Serve

本文作者:Schucking-Sattin

本文链接:https://www.cnblogs.com/Schucking-Sattin/p/17174599.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Schucking_Sattin  阅读(49)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起