博德之跃 3(SCCPC 2026)
不知道是老了还是怎么样,感觉现在做贪心的题目很吃力啊!
贪心地考虑问题。对于 A 序列串 s[l…r],如果 sl=sr,那么选字典序较小的弹出。
剩下的情况就是 sl=sr,令 c=sl=sr,i 为从左到右第一个不等于 c 的下标,j 为从右到左第一个不等于 sr 的下标。分类讨论问题:
- 当 si,sj>c 时,尽可能拖延 c 的时长,所以 A 序列左右弹出所有 c 以及 B 序列后面补上长度为 max(i−l,r−j) 的 c 串。
- 当 si,sj 有一个 <c,一个 >c 时,不失一般性地假设 si<c<sj。则我们尽可能让 si 尽快出现,所以左边弹出 i−l 个 c,右边弹出 min(i−l,r−j) 个 c,以及 B 序列后面补上长度为 i−l 的 c 串。
- 当 si,sj<c 且 si=sj 时,可是尽可能让 si/sj 尽快出现,所以左右边各弹出 min(i−l,r−j) 个 c,以及 B 序列后面补上长度为 min(i−l,r−j) 的 c 串。
- 当 si,sj<c 且 si=sj 时,不失一般性地假设 si<sj。同样地,我们尽可能让 si 尽快出现,所以左边弹出 i−l 个 c,出于字典序最小的考虑,sj 越早出现一定是更优的,所以右边弹出 min(i−l,r−j) 个 c,以及 B 序列后面补上长度为 i−l 的 c 串。
感觉讲得不是很好,如果有问题可以评论或者私信问问。