专栏文章

题解:AT_arc151_e [ARC151E] Keep Being Substring

AT_arc151_e题解参与者 5已保存评论 7

文章操作

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

当前评论
7 条
当前快照
1 份
快照标识符
@mimzp1lq
此快照首次捕获于
2025/12/01 18:11
3 个月前
此快照最后确认于
2025/12/01 18:11
3 个月前
查看原文
首先你贪心的去考虑肯定是把 XX 消成 XXYY 的最长公共子串,然后在加成 YY
然后最长公共子串可以直接二分答案加哈希做到 O(nlogn)O(n \log n),当然也可以 SAM 做到 O(n)O(n),注意给所有点的哈希值映射为一个随机值不然会被卡。
但是这个题有个很神秘的限制就是你不能把 XX 消空,所以考虑 XXYY 最长公共子串为空的情况。
这时 XX 的所有字符最后都不会留下来,而留下一个字符向外扩展显然比留下 XX 的一个子串向外扩展容易。因此最优的方案一定是先把 XX 删到只剩一个字符,再把这个字符移动到一个 YY 中有的字符,然后扩展到 YY
于是可以把 AiA_iAi+1A_{i+1} 之间连边,以所有 XX 中的字符为起点,所有 YY 中的字符为中点,求出最短路即可。
时间复杂度 O(nlogn)O(n \log n)

评论

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

正在加载评论...