题解:P15650 [省选联考 2026] 摩卡串 / string
sbno333
·
·
题解
省流:复杂度 O(nk^{1.5})。
考虑特殊性质,发现都是 DP。
于是我们认为正解也是 DP。
考虑从前向后放字符。
我们发现一些位置开头的前缀在某一次被认为小后之后都在贡献。
然后这些在这之前都是 s 的一段前缀。
考虑 dp_{k,len,c,0/1} 表示已经有 k 个符合要求,当前串最多能匹配到 s 长为 len 的前缀,有 c 个开头位置之后都在贡献,是否存在子串 s 时,n 最小值。
发现当 len 确定,对自己和 k,c,0/1 影响就确定了,先预处理,然后转移即可。
复杂度 $O(nk^2)$。
不过似乎 $c$ 很大的时候走不了几步。
我们有理由怀疑甚至 $c$ 还没成长起来 $k$ 就爆了。
考虑我们尽量快增加 $c$,单次最多增加 $len$,最后 $c$ 只需要开到 $10^3$。
空间还是爆的。
考虑发现每次 $c$ 增长都伴随 $len$ 的减少。
于是经过分析,发现 $c$ 最多开到 $O(k^{0.5})$。
具体就是先把 $len$ 开满后 $c$ 逐渐增加,每次增加 $1$,每次都对 $k$ 贡献。
于是复杂度 $O(nk^{1.5})$。