首页 > TAG信息列表 > Slogans
【CF 700E】Cool Slogans
CF 700E。 Description 给出一个长度为 \(n\) 的字符串 \(\mathrm{str}\)。你需要构造一个尽量字符串序列 \(s_1, s_2, \cdots, s_k\),满足: 对于任意 \(1 \leq i \leq n\),\(s_i\) 为 \(\mathrm{str}\) 的子串。 对于任意 \(1 < i \leq n\),\(s_{i - 1}\) 在 \(s_i\) 中至少出现了两CF700E Cool Slogans
首先可以发现选出的字符串序列一定可以调整成 \(s_i\) 为 \(s_{i + 1}\) 的一段后缀。 注意到这本质上是一个关于子串选择,与子串出现位置有关的问题,于是考虑借助 \(\rm endpos\) 来解决。 那么这个问题本质上就是选择后缀自动机 \(\rm parent\) 树上一条合法的祖先链。 由于 \(\rm【题解】CF700E Cool Slogans
CF700E Cool Slogans \(\text{Solution:}\) \(dp,\) 思路都是对的 又死细节上了 对 SAM 的理解还是不够……(或者应该说是 \(dp\)) 首先考虑一下什么情况我们可以接上一个串。题目给的是出现了两次,那转化到 SAM 上,我们如何用已知信息来判别? 首先证明一个结论,如果 \(t\) 可以接到当前[cf700E]Cool Slogans
建立SAM,假设$s_{i}$在SAM中的位置为$a_{i}$以及$l_{i}=|s_{i}|$,通过$(a_{i},l_{i})$即可确定$s_{i}$,也即可判定是否合法 更具体的,即要求$\forall 2\le i\le k,|[x-l_{i-1}+l_{i},x]\cap R_{a_{i}}|\ge 2$(其中$x$为$R_{a_{i-1}}$中某个元素,以下默认) (实际上对于$R_{a_{i-1}}$中每一