【题解】P7114 [NOIP2020] 字符串匹配 kmp、枚举倍数、调和复杂度
- \(p\) 是字符串 \(S\) 的整周期当且仅当 \(p|(|S|-bd(S))\) 且 \((|S|-bd(S)) | |S|\) 。
一个直接的想法是枚举 \(C\) 然后枚举 \(AB\) 。
但是这个做法会受到枚举因数的 \(O(\sqrt{n})\) 复杂度限制。
技巧:枚举因数和枚举倍数互换优化复杂度。
考虑枚举 \((AB)^i\) 即反向枚举 \(C\) 。
可以用 kmp 算法在 \(O(n)\) 的时间内预处理每个前缀的 \(border\) 长度,那么很容易做到 \(O(n\log n\log 26)\) 。