Dreamoon Loves AA

题目传送门

思路

考虑如何 \(\rm check\) 一组 \((L,R)\) 是否合法。

我们扣出所有相邻 \(\verb!A-A!\) 之间的长度,设有 \(m\) 段,每段长度为 \(d_i\)

显然,对于每个 \(i\),能在第 \(i\) 段塞的 \(\verb!A!\) 的个数在区间 \([\lceil \frac{d_i}{R} \rceil-1,\lfloor \frac{d_i}{L} \rfloor -1]\) 内。

那么显然有 \(k \in [\sum \lceil \frac{d_i}{R} \rceil-1,\sum \lfloor \frac{d_i}{L} \rfloor -1]\)

得到了这个我们就能简单二分出满足这个条件的最大的 \(L\) 和最小的 \(R\),设它们分别为 \(L_0\)\(R_0\)

但是别忘了,若 \((L,R)\) 合法还要满足 \(\lceil \frac{d_i}{R} \rceil \le \lfloor \frac{d_i}{L} \rfloor\)

\(L_0 \ge R_0\) 时我们发现任取 \((L,R)\) 满足 \(L,R \in [R_0,L_0]\) 均合法,此时答案为 \(0\)

\(L_0 < R_0\) 时我们发现任取 \((L,R)\)\(\lceil \frac{d_i}{R} \rceil\) 最多比 \(\lfloor \frac{d_i}{L} \rfloor\)\(1\),此时对于每一段,我们发现当且仅当 \(L \in (s_i,L_0]\)\(R \in [R_0,t_i)\) 时非法,于是我们可以求出 \(s_i\)\(t_i\),问题转化成 \((L,R)\) 要么满足 \(L \le s_i\),要么满足 \(R \ge t_i\),简单贪心即可。

代码

提交记录

posted @ 2024-01-16 18:24  Tx_Lcy  阅读(13)  评论(0)    收藏  举报