专栏文章
IOI2024 Day2T1
P11052题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mip18jga
- 此快照首次捕获于
- 2025/12/03 04:30 3 个月前
- 此快照最后确认于
- 2025/12/03 04:30 3 个月前
首先考虑保证有解的情况,目标是找到一组可能的解,不需要 check。
如果一种字符在 中出现 次,在 中出现 次,那么在解 中需要出现 次。
将出现次数较少的一侧的元素标记为关键位,我们要将所有关键位在另一个序列中找到匹配,且匹配两两不交。
考虑两个序列中的第一个关键位 和 ,接下来分类讨论:
如果它们相等,直接匹配即可。
否则,如果 在 中没有出现,则 需要匹配 中的某个字符,可以匹配然后递归;对于另一边同理。
剩下的情况是 在 中出现且 在 中出现。
如果 中 的出现次数小于 中 的出现次数,则 不能匹配 中的字符,可以直接将 匹配掉然后递归。对于另一边同理。
剩下的情况可以说明其无解。
考虑 的部分分,下面我们要设计算法 check 的正确性。
我们现在想要构造一个 ,使得 不是 的子序列,但为 的子序列。
假设求出了 在 中的匹配位置为 。
依次加入字符,维护 上分别匹配到了 。我们现在想让 上匹配, 上失配。
如果 且 ,则加入 ,就能构造无解。
可以说明只有在某次走到 且 时,才能构造无解。
于是我们可以考虑 DP 计算 时最小的 ,设为 。可以暴力枚举 的上一个转移的位置,然后二分出新的匹配位置,在转移过程中可以判定有没有 且 的情况。
对于 时最小的 ,将 交换做一遍即可。
时间复杂度 。
考虑优化时间复杂度。
对于可转移到 前的一个点,可分为两个区间,一个满足走一步后 ,另一个满足走一步后 。区间的端点可以二分得到。
用线段树维护 的区间最小值,对于两个区间,前一个可以转移到 ,后一个可以用于判定无解。
设 同阶,时间复杂度 ,期望得分 100。
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...