题目
分析
统计以 S i S_i Si开头的形如 AA \text{AA} AA的子串的数量,存入 L [ i ] L[i] L[i];统计以 S i S_i Si结尾的形如 AA \text{AA} AA的子串,存入 R [ i ] R[i] R[i]。于是把可以把它们拼起来,答案就是 ∑ i = 2 n ( L [ i ] × R [ i − 1 ] ) \sum \limits_{i = 2}^{n} (L[i] \times R[i - 1]) i=2∑n(L[i]×R[i−1])。
L L L与 R R R数组的处理,暴力枚举+哈希判断相等是 O ( n 2 ) O(n^2) O(n2)的,考虑优化这个东西。
我们枚举 A \text{A} A的长度 l l l,那么一个 A \text{A} A在 S S S中会经过且仅经过一个 S k ⋅ l S_{k \cdot l} Sk⋅l,如图所示,蓝点是 S k ⋅ l S_{k \cdot l} Sk⋅l,可见任何一个长度为 l l l的子串必然经过一个蓝点。
那么我们把这个串看成左右两端,即以 S k ⋅ l S_{k \cdot l} Sk⋅l开始的后缀(下图中橙色示意的范围)和以 S k ⋅ l S_{k \cdot l} S