[HAOI2016]找相同字符

考虑在一个字符串里取出两个子串相同的方案数, 一个方案记为二元组 \(([l_1,r_1],[l_2,r_2])\), 要满足 l1 ≤ l2, 两个表示不同的方案也算不同。

考虑取出两个子串,这两个子串相同, 长度都为 L, 则会有和这两个子串的开头分别相同的两个后缀的 LCP ≥ L, 设这个 LCP 的数值为 k, 则这两个后缀对答案的贡献就是 k,所以答案就是 \(\sum_{i\neq j} LCP(suf[i], suf[j])\)

所以跟某个叫做 “差异” 的题目做法一样, 还是在 height 数组里搞并查集。

最后的答案就是容斥一下就行了。

posted @ 2020-12-30 20:20  xwmwr  阅读(99)  评论(0编辑  收藏  举报