摘要:
赛时只有蒋老师和杜老师通过了该题,笔者SA写法也是在cf被卡常了qoj能过。总体来说是一道很优秀的题目,并且有一定的思考和代码难度。 注意到从前往后考虑 $ S $ 串不容易维护。我们考虑从最后一个状态出发,最后的 $ S $ 串一定存在是一个字符的情况。然后我们构成出反串 $ S^R $ ,上一个 阅读全文
2024年11月8日
2024年9月18日
摘要:
题目传送门 题意 给定一个字符串,求每个前缀的字典最大序子串。 注意到: 对于每个前缀 $s_{[1,i]} $ ,字典序最大子串的右边界一定是 \(i\) 。 随着着 \(i\) 的增大,字典序最大子串的左边界一定是单调不减的。 解法不分先后。 后缀数组 SA SA & SAM 后缀数组 & 后缀 阅读全文
2024年9月10日
摘要:
基本子串结构 xtq 的 2023 年集训队论文《一类基础子串数据结构》提及。能够对子串问题减少一定思维量。相比于 sam 只能固定 endpos 向前扩展,基本子串能方便处理子串前后扩展。 这个东西有点科技了,我不是能有自信能解释清楚,这里指自己认为写的比较详细的博客供参考。crashed | 1 阅读全文
2024年8月9日
摘要:
乱搞 看到 \(n=1e5\) ,时限3s,存在修改操作,很自然的想到根号分治。 考虑按照时间分治。对每 \(B\) 个交换统一处理, \(B\) 个交换最多有 \(2B\) 个元素改变状态,剩下都不变。那么只要对这 \(2B\) 元素内,暴力枚举,剩下的元素构建数据结构实现二维数点,平面内区间最值 阅读全文
2024年8月6日
摘要:
乱搞 非正解写法。分类讨论各种情况。 降序排序 对应交换即可 数组个数小 直接考虑相邻的交换 其他都看做随机数据 考虑结合前面情况,很容易想到,先把数组变成一个尽量有序的数组(每个元素和自己正确的位置相差不大)。最后再多次相邻交换,使得每个元素都在正确位置。 把数组变成一个尽量有序的过程,很容易想到 阅读全文
2024年7月24日
摘要:
wcz在2022年集训队论文《浅谈与Lyndon理论有关的字符串组合问题》中做过详细介绍,由于笔者太菜,这里只做简单介绍,并且不做证明。 Lyndon 分解 Lyndon串:对于字符串\(s\),如果\(s\)的字典序严格小于\(s\)的所有后缀的字典序,我们称\(s\)是Lyndon串。 Lynd 阅读全文
2024年7月23日
摘要:
manacher 马拉车通过在每个字符间插入一个特殊字符,使得字符串长度为奇数,从而保证每个字符都有中心。在每个中心记录回文串的长度。 马拉车的扩展方式和\(Z\)函数类似。都是通过映射之前已经算过的位置,然后尽可能的向右扩展。复杂度\(O(n)\) 通常马拉车的题目统计回文串需要与其他数据结构结合 阅读全文
摘要:
终于来到大名鼎鼎的后缀结构了,后缀结果可以解决许多子串问题。后缀结果是字符串经常考察的点,需要重点学习。 SA 后缀排序,是指这个对字符串\(s\)的每一个后缀字符串进行排序,通过处理每个后缀的前缀来解决子串问题。\(SA\):排名为\(i\)对应原字符串下标,\(rk\):下标为\(i\)的后缀排 阅读全文
2024年7月22日
摘要:
最小表示法 字符串 \(S\) 的最小表示为与 \(S\) 循环同构的所有字符串中字典序最小的字符串。 一般用于判断两个字符串是否循环同构。只需要都用最小表示,然后判断即可。 考虑如何构造。这里oiwiki解释的很清楚。就不做过多解释了。复杂度\(O(n)\) int i = 1, j = 2, k 阅读全文
摘要:
序列自动机 判断字符串\(s\)是否存在序列\(t\)。只需要记录这个位置,后面每个字符出现的最早位置即可\(nxt\)。 求子序列个数 记忆化搜索\(f[x] = \underset {y \in x'son}{\sum} f[y] + 1\) 求两串的公共子序列个数 两个串的记忆化搜搜\(f[x 阅读全文