字符串练习

P4081 [USACO17DEC] Standing Out from the Herd P

只有一个串怎么做?

那就是 P2408 不同子串个数

跑一遍后缀排序,按排序结果遍历后缀,考虑每个后缀会产生多少新串。

为保证每个不同的串只被记录一次,只考虑去掉它与上一个串的重复部分,即为 \(height_i\)

多个串类似,在串中加上分隔符跑 SA,给每个位置记录一下它原来属于哪个串。

同一个串之间的去重与上面同理,只不过求 lcp 要写个 ST 表什么的求最小值(可能不用?)。现考虑不同串之间的去重。

由于一个后缀与其它后缀的 lcp 越往前越小,越往后越小(因为取 \(\min\)),因此只用向前向后都找到第一个不属于同一个串的后缀并取 lcp。

把上面 3 个lcp 长度取 \(\max\) 就是应该去掉的串数。

P2603 [ZJOI2008] 无序运动

一组点就是一堆首尾相接的向量形成的链。

不考虑沿 \(x\) 轴翻转的情况,相邻向量之间的 长度之比 和旋转的 有向角度 不变。因此以这个东西为特征值表示一组点。于是就是一个字符集巨大的 \(\text{ACAM}\)

听说在 \(ch[u][i]\) 不存在时 暴力跳 fail 是对的,看看这个,我不会证。

翻转时 有向角度 会变成负的,解决方法是把给的点集沿 \(x\) 轴翻转后再匹配一次,加起来。

五百万车细节,挂了 16 发。

P9482 [NOI2023] 字符串

here.

posted @ 2023-07-21 11:27  jimmyywang  阅读(31)  评论(0)    收藏  举报