【题解】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)\)

代码记录

posted @ 2021-10-14 22:15  Themaxmaxmax  阅读(37)  评论(0编辑  收藏  举报