SAM相关。已经摆了。

这里是一些别的字符串题。

P10716

次询问 ,计数合法的非空字符串 使得存在可空字符串 满足

合法的 是前缀且在失配树上是 的祖先,答案为最大的合法前缀 在失配树上的

枚举 ,向后找不重叠的出现位置,即后缀和整个串 lcp ,即第一个 z 函数 的位置。枚举完 之后就删去 的位置,并查集维护下一个位置。复杂度

P11150

给定长为 次询问 ,最小化 ,再最小化

先在 末尾加入极大字符。要找到 使得 。最小化第一个不同的位置 ,再最小化 开始的后缀加上 开始的后缀,再最小化 中的位置

先枚举 ,枚举 ,可以用 SAM 做子串定位找到最小的 使得 。然后对于相等的 ,预处理 的后缀排序即可比较 的两个后缀的字典序大小。

要比较 ,有 。如果 开始的后缀不是 开始的后缀的前缀,就直接比较 。否则比较 ,因为之前匹配,所以 的前缀。如果从 开始的后缀不是从 开始的后缀的前缀,那比较 ;否则两个串完全相等。

此时已经找到了最小的串,但是 选取的位置可以往前。找到 的最小循环节 ,二分将 向前挪 ,且

Q9406

给定 个字符串,计数无序 满足 且。

判掉含相等的若干情况。

不妨设 ,且 。即 的前缀,

给每个串排序,即分成三段分类讨论每段的 lcp,将所有串加上终止的极小字符求后缀数组。预处理出所有 ,按排序后的顺序枚举 ,区间查询。