SAM相关。已经摆了。
这里是一些别的字符串题。
P10716
次询问 ,计数合法的非空字符串 使得存在可空字符串 满足 。
合法的 是前缀且在失配树上是 的祖先,答案为最大的合法前缀 在失配树上的 。
枚举 ,向后找不重叠的出现位置,即后缀和整个串 lcp ,即第一个 z 函数 的位置。枚举完 之后就删去 的位置,并查集维护下一个位置。复杂度 。
P11150
给定长为 的 。 次询问 ,最小化 ,再最小化 。
先在 末尾加入极大字符。要找到 使得 且 。最小化第一个不同的位置 ,再最小化 从 开始的后缀加上 从 开始的后缀,再最小化 中的位置 。
先枚举 ,枚举 且 ,可以用 SAM 做子串定位找到最小的 使得 。然后对于相等的 ,预处理 的后缀排序即可比较 的两个后缀的字典序大小。
要比较 的 和 ,有 。如果 开始的后缀不是 开始的后缀的前缀,就直接比较 和 。否则比较 和 ,因为之前匹配,所以 是 的前缀。如果从 开始的后缀不是从 开始的后缀的前缀,那比较 和 ;否则两个串完全相等。
此时已经找到了最小的串,但是 选取的位置可以往前。找到 的最小循环节 ,二分将 向前挪 ,且 。
Q9406
给定 个字符串,计数无序 满足 或 且。 或 且 或 。
判掉含相等的若干情况。
不妨设 ,且 。即 是 的前缀,。
按 给每个串排序,即分成三段分类讨论每段的 lcp,将所有串加上终止的极小字符求后缀数组。预处理出所有 ,按排序后的顺序枚举 ,区间查询。