$kmp$ .
对于每个位置 $i$ ,需要找出 $2|Border|\le i$ 的非空 $Border$ 数目.
用 $kmp$ 求一次 $next$ 数组,根据 $next$ 数组,可以建出 $kmp$ 自动机的树.
这棵树以 $0$ 为根, $next(i)$ 向 $i$ 连边, $i$ 号点表示了长度为 $i$ 的前缀,从根到 $i$ 路径上的点都为前缀 $i$ 的 $Border$ .
那么只需要知道根节点到 $i$ 的路径上有多少个编号 $\le \lfloor \frac i 2\rfloor$ 的节点.
编号从上到下是单调递增的,所以可以维护一个栈,存储根节点到当前节点路径上的点,在栈中二分求出答案.
时间复杂度 $O(T\cdot n\log n)$ .
1 |
|