专栏文章

题解:AT_awtf2025_b Movies

AT_awtf2025_b题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miny1nus
此快照首次捕获于
2025/12/02 10:13
3 个月前
此快照最后确认于
2025/12/02 10:13
3 个月前
查看原文
首先如果集合确定,有一个简单的贪心做法,把所有集合按照右端点升序排序,右端点相同按照左端点升序排序,对于当前考虑的区间 [L,R][L, R] 和当前每天看电影 / 没看电影的局面,从 [L,R][L, R] 中找到最小的一天,满足这天没看电影,然后让这天看电影。如果不存在这样一天,无影响。
然后就是这种题的常规想法,拆贡献,但由于各种区间、天之间互相纠缠、互相影响,不好算有多少种集合使得某一天一定看电影。但是观察贪心过程可以注意到,“极长区间”很有意义,也就是说枚举极长的看电影连续段 [l,r][l, r],使得 l1l - 1r+1r + 1 没看,且 lrl \sim r 都看了。
但是直接考虑极长连续段,也不好算,继续寻找性质。如果我们枚举的极长区间是 [l,r][l, r],同时集合中存在一个区间 [Li,Ri][L_i, R_i] 使得 Li∉[l,r]L_i \not \in [l, r],如果 Li>rL_i > r,那么这个区间显然对 [l,r][l, r] 无影响,如果 Li<lL_i < l,这个区间可能对 [l,r][l, r] 产生影响,但产生影响的必要条件是 l1l - 1 看电影了,所以不符合我们的钦定。
于是乎,设 tl,rt_{l, r} 表示所有 Li[l,r]L_i \in [l, r] 的区间组成的集合,求 fl,rf_{l, r} 表示,有多少个 tl,rt_{l, r} 的子集,使得 [l,r][l, r] 是极长连续段。如果求出了 fl,rf_{l, r},由于当 [l1,r1][l2,r2]=[l_1, r_1] \cap [l_2, r_2] = \varnothing 的时候,tl1,r1t_{l_1, r_1}tl2,r2t_{l_2, r_2} 不交,两者的 ff 值可以直接相乘,所以后面的东西就简单了,直接用一个 n2n^2 个状态的二维 dp。dp 转移的时候要注意,我们钦定的这些极长连续段不仅不能相交,还不能相邻。
考虑怎么求 fl,rf_{l, r}。注意最开始我们的贪心,这个贪心给了我们一个考虑区间的顺序,所以把输入的区间排好序,设 fi,l,rf_{i, l, r} 表示考虑了前 ii 个区间,当前的 fl,rf_{l, r} 的值。
当加入区间 [L,R][L, R] 的时候:
  • 不选择。这时候直接 fi,l,rfi1,l,rf_{i, l, r} \gets f_{i - 1, l, r}
  • 选择。
    • [L,R][L, R][l,r][l, r] 包含的时候,选择这个区间对于 [l,r][l, r] 没有影响,所以 fi,l,rfi1,l,rf_{i, l, r} \gets f_{i - 1, l, r}
    • 我们可以让 [L,R][L, R] 单开一个极长区间,也就是 <i< i 的区间都不选,只选 ii,所以 fi,L,L1f_{i, L, L} \gets 1
    • 如果 L=lL = l,那么把 [L,R][L, R] 这个区间选在 [L+1,r][L + 1, r] 上的时候,可以让极长区间向左拓展,所以 fi,l,rfi1,l+1,rf_{i, l, r} \gets f_{i - 1, l + 1, r}
    • 如果 L[l,r]L \in [l, r]RrR \ge r,那么根据贪心过程,可以让极长区间向右拓展,所以 fi,l,rfi1,l,r1f_{i, l, r} \gets f_{i - 1, l, r - 1}
    • 还有一种情况,加入了 [L,R][L, R] 之后让两个极长区间合并了。枚举 k[L,R]k \in [L, R] 表示 [L,R][L, R] 使得位置 kk 看电影了,那么区间分裂成了 [l,k1][l, k - 1][k+1,r][k + 1, r],直接 fi,l,rfi1,l,k1×fi1,k+1,rf_{i, l, r} \gets f_{i - 1, l, k - 1} \times f_{i - 1, k + 1, r}。这个转移还需要满足条件 lLl \le L
算出 ff 后直接用前面说的 dp 就行了。复杂度 O(n5)O(n^5),但是常数非常小。

评论

0 条评论,欢迎与作者交流。

正在加载评论...