[NOIP2020] 字符串匹配

枚举前缀 \(AB\)\(i\),kmp 判断是不是周期串。

[COCI2016-2017#4] Rima

押韵条件:

  • 第一位不一样
  • 去掉第一位

trie 树扫一扫。

[POI2010] ANT-Antisymmetry

重载马拉车。

[USACO15FEB] Censoring G

ac 自动机,加个回退操作。

[POI2012] PRE-Prefixuffix

形如 \(ABCBA\)。枚举 \(A\),哈希二分最长 \(B\)

[JSOI2012] 玄武密码

建 SAM 无脑跑

「JZOI-1」拜神

先跑 SA。

二分长度 \(L\),check 就看有没有 \(\text{lcp}>=L\) 的。

放到 SA 上相当于从大到小扫 height,每次合并两边的块,求 \(L\) 这个版本区间内是否存在两个数在相同块中。

先看后面的问题,我们可以维护每个版本每个位置在序列上是同一个块的后继,存在就变成区间最小值在区间内,这可能可以主席树。

然后就是如何合并两个块,容易想到启发式合并。set 维护每个块中的点,每次合并更新主席树。接着处理询问,就是在主席树上查区间最小值。这是两只老哥的。

String Journey

首先,答案是 \(\sqrt n\) 级别的,因为是等差数列求和。

然后我们发现,一定存在一种最优解满足每个串是上一个串长度 \(-1\)。调整法不难证明。

那么倒着确定方案,即从小到大枚举长度。维护 \(f_{i,j}\) 表示位置 \(i\) 是否存在方案使他后面选了 \(j\) 个串。转移考虑新字符插入前面还是后面,维护哈希即可。

posted on 2024-08-07 16:35  lizhous  阅读(13)  评论(0编辑  收藏  举报