其他分享
首页 > 其他分享> > CF587F Duff is Mad

CF587F Duff is Mad

作者:互联网

更好的阅读体验

题意

给定 \(n\) 个字符串 \(S_{1...n}\).
定义 \(\text{occur}(t, s)\) 为 字符串 \(t\) 在字符串 \(s\) 中的出现次数. 有 \(q\) 次询问,每次给出 \(l\),\(r\) 和 \(k\),输出 \(\sum\limits_{l\le i\le r}\text{occur}(s_i, s_k)\).

\(n,k,\sum |s_i|\le 10^5\)

题解

我们对所有串建立fail树

令 \(p_{i,j}\) 表示串 \(s_i\) 的前 \(j\) 个字符在AC自动机上对应点的编号,\(end_{i}\) 表示串 \(s_i\) 在AC自动机上对应点的编号

\[\sum_{l\le i\le r}\text{occur}(s_i, s_k)=\sum_{l\le i\le r}\sum_{1\le j\le \text{size}_k}\text{isanc}(end_{i}, p_{k, j}) \]

其中 \(\text{isanc}(x, y)\) 表示在fail树上 \(x\) 是否为 \(y\) 的祖先

看到 \(\sum |s_i|\le 10^5\) 这条限制,容易想到对于 \(|s_k|\) 根号分治

令 \(M=\sum |s_i|\)

选择一个合适的 \(T\),我们视 \(n\),\(M\) 和 \(q\) 为同阶,\(T\) 取 \(\sqrt{M}\) 即可
复杂度可以简单地认为是 \(\mathcal{O}(n\sqrt{M})\)

代码 codeforces submission 144319232

标签:le,end,Duff,text,sum,Mad,mathcal,occur,CF587F
来源: https://www.cnblogs.com/gzezfisher/p/cf587f.html