前置芝士:回文前缀&& b o r d e r border border
推荐博客
推荐博客
考虑点分治,问题变成求经过重心的回文路径个数。
一条经过重心的回文路径长这样:
x x x到 z z z的串与 y y y到 r o o t root root的串相同。
建出根到每个节点对应的串的AC自动机,并在 f a i l fail fail树上找出每个串的回文前缀。判断根到某个节点对应的串是不是回文串可以用哈希解决。
根据 b o r d e r border border理论,一个回文串的所有回文前缀的长度可以组成一个不超过 O ( l o g n ) O(logn) O(logn)项的等差数列。即若 T k T_k Tk是回文串, T k T_k Tk的最长回文真前缀是 T k − 1 T_{k-1} Tk−1, T k − 1 T_{k-1} Tk−1的最长回文真前缀是 T k − 2 T_{k-2} Tk−2,…, T 2 T_2 T2