QOJ9915 General Symmetry
看上去不大好做,考虑 bitset。枚举右端点,维护 $f_i$ 表示中心是 $\frac{i}{2}$ 的串是否还是回文的。取出 $g_i$ 表示 $i$ 是否能和 $r$ 匹配,则每次操作是 $f\&=(g«r)$。
$g_i$ 是好求的,取出所有字符做一个类似滑动窗口的东西即可,因为 $r$ 右边的部分是没有影响的。
求答案的话,看 $f$ 的每一位什么时候变成了 $0$ 即可,提出变化的位,找到所有的 $1$ 即可。
QOJ9406 Triangle
假设 $S_a\leq S_b\leq S_c$,限制只需要是 $\max(S_a+S_b,S_b+S_a)> S_c$。
有一个经典结论 $S_a+S_b<S_b+S_a \leftrightarrow S_a^{\infin}<S_b^{\infin}$,所以可以简单排序一下。
假设 $S_a+S_b$ 更大,先枚举 $c$,然后暴力枚举所有 $c$ 的前缀作为 $a$,接下来对 $b$ 的限制就是,$S_a^{\infin}>S_b^{\infin}$ 并且 $S_b>S_c[\lvert a\rvert+1,\dots,\lvert c\rvert]$。二维数点即可。
[ARC175F] Append Same Characters
首先若 $S,T$ 之间没有前缀关系,那其之间大小关系固定。考虑 $S$ 是 $T$ 的前缀,设 $T’=T-S$ 即 $T$ 去掉 $S$ 这一个前缀。如果加了字符串 $D$,需要比较 $D$ 和 $T’+D$。所以当 $D=T’^{\infin}$ 时两者相等,小的时候 $S$ 更小,大的时候 $S$ 更大。所以将所有串的所有后缀复制无限倍进行排序,扫一遍即可。
然后还需要求 $\text{LCP}(S^{\infin},T^{\infin})$,这个也等于 $\text{LCP}(S+T,T+S)$。
CF1909G Pumping Lemma
正常想法是枚举 $S=XY+Z$,然后删掉 $T$ 的一个前缀和后缀,要求一个区间的最小循环节。
这个有一个很深刻的求法:要求串 $S$ 的最小循环节,考虑 $len=\lvert S\rvert$,不断枚举 $len$ 的质因子,尝试除一个数。这样一定能求出最小循环节,因为如果 $k$ 是循环节,那若 $x\times k\vert len$ 那么 $x\times k$ 也是循环节。
区间 border 查询
CF1043G Speckled Band
可以发现答案小于等于 $4$,一个最困难的东西是求区间 border。先枚举长度小于等于 $\sqrt n$ 的,然后如果没有的话,在 SA 上前后 $\sqrt n$ 个判一下。