【笔记】字符串选讲:ACAM、SAM 2024.8.1
[COCI2015-2016#5] OOP(Trie)
P6727 [COCI2015-2016#5] OOP - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
正反串分别建 Trie,可以搞出两个 dfn 区间,加之长度限制,三维数点。
有
[Guilin21H] Popcount Words(ACAM、倍增)
Popcount Words - Problem - QOJ.ac
对询问串建 AC 自动机。观察到结构有倍增性质,直接倍增。
无标题(ACAM)
- 称两个序列
和 为本质相同的当且仅当每个序列内部不包含相同的数,且对任意 ,有 。 - 给定⼀个
到 的排列 , 次查询,每次查询⼀个 的排列,问有多少个 的区间和该小排列本质相同。 。
将排列
对询问排列 apply
这里暴力跳 fail 的复杂度在给定多个串时是对的,给定 Trie 树是不对的。
[CF1801G] A task for substrings(ACAM)
A task for substrings - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
惊人的一步:
改成
*[Nanjing23J] Suffix Structure(ACAM)
Suffix Structure - Problem - QOJ.ac
使用可持久化线段树维护 Trie 图,建立 AC 自动机。对除了根以外的每个节点
[Hangzhou22L] Levenshtein Distance(编辑距离)
Levenshtein Distance - Problem - QOJ.ac
改为求
显然
必然有
根据归纳可以发现:
即对角线单调不降,启发沿着对角线转移。
令
前缀本质不同子串个数(SAM)
建 SAM,
[NOI2018] 你的名字(SAM)
P4770 [NOI2018] 你的名字 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
全局的情况。可以将
区间的情况。即我们只需要多次判断
[BJWC2018] Border 的四种求法(SAM)
P4482 [BJWC2018] Border 的四种求法 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
即求一个最大的
建后缀树。从右往左扫,扫到
结论:一个串的 border 可以被分为
区间本质不同子串个数(SAM)
P6292 区间本质不同子串个数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
从前缀本质不同子串个数出发。链上的子串,将其答案记在左端点上。我们现在想要加入一条链。发现长度连续,endpos 相同的子串,可以
- 将这条链划分为很多段,每一段的上次出现右端点(记作
)相同; - 整条链的
推平为一个数。
将
*[ECFinal22B] Binary String
Binary String - Problem - QOJ.ac
划分为若干个
*[CCPCF22G] Recover the String
Recover the String - Problem - QOJ.ac
首先可以做拓扑排序,求出每个点代表的长度。从最长的串开始,发现如果有一个点只有一个入边,说明这个点代表的字符串是同一个字符。否则,有两个入边,继续递归,可以观察
优化就是用并查集,在同一层中将相同的子串的右端点合并起来,并适当地继承到下一层。不知道什么叫适当。
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/18336620
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2023-08-01 【笔记】数论:筛法 2023.8.3
2023-08-01 【笔记】字符串基础 2023.7.31
2023-08-01 【模板】回文字符机 PAM