随笔分类 -  字符串——SAM

摘要:XVII.CF666E Forensic Examination 首先,同之前大部分题一样,本题仍然有两种解法。SA解法参见本人的题解。SAM解法见下。 仍然,同之前大部分题一样,本题SAM解法完爆SA——码量、思维难度、复杂度。 首先,考虑把所有东西怼一块跑广义SAM,然后对于询问的原串中某一段区 阅读全文
posted @ 2021-04-01 12:19 Troverld 阅读(61) 评论(0) 推荐(0) 编辑
摘要:XVI.CF700E Cool Slogans 这题有SA和SAM两种做法,但事实证明,本题的SAM做法无论在思维难度还是在代码难度上,都爆踩SA做法。 首先,SA做法可以参见本人的题解。 然后,SAM做法见下。 首先,我们一定可以将每个串砍掉一部分,使得我们所需串中,前一个串必是后一个串的后缀。具 阅读全文
posted @ 2021-04-01 12:18 Troverld 阅读(44) 评论(0) 推荐(0) 编辑
摘要:XV.CF1073G Yet Another LCP Problem 这里记录一下我在思考本题时的一个感悟,即后缀数组与后缀自动机的等价性。 众所周知,SA时有一个常见思路就是针对 height 数组建一棵笛卡尔树。但是,该笛卡尔树,唯一等价于SA针对的串的反串的parent tree。具体可以分别 阅读全文
posted @ 2021-04-01 12:15 Troverld 阅读(76) 评论(0) 推荐(0) 编辑
摘要:XIV.CF1207G Indie Album 听说也可以AC自动机? 首先,我们针对题目中给出的trie树,跑一个广义SAM。然后,考虑我们询问一个串在trie上的某个节点的出现次数,就是询问当我们把此节点及其到根路径上的所有点加入SAM后,parent tree上该点子树中结尾点的数量。于是直接 阅读全文
posted @ 2021-04-01 12:13 Troverld 阅读(41) 评论(0) 推荐(0) 编辑
摘要:XIII.[十二省联考2019]字符串问题 首先,我们可以把题目转变成这样:对于一些A类串,其有连向某些B类串的边;对于某些B类串,其又有连向某些A类串的边。要你找出一条权值最长的路径。(此时显然如果成环则答案一定是 1) A到B的串题目已经给出了,关键是B到A的串。 我们发现,若某个 \ 阅读全文
posted @ 2021-04-01 12:11 Troverld 阅读(50) 评论(0) 推荐(0) 编辑
摘要:XII.CF1037H Security 一开始费尽心思写了个假的SA做法出来,后来才想到SAM做法…… 我们考虑贪心地求出比当前询问的串 T 略大的串的方法:即先找有没有前 |T| 位全相同,第 |T|+1 位最小的串存在于 [L,R] 中,如果没有再去找前 \(| 阅读全文
posted @ 2021-04-01 12:10 Troverld 阅读(57) 评论(0) 推荐(0) 编辑
摘要:XI.CF30E Tricky and Clever Password 一开始看错题,硬生生把难度上升了很多…… 所以以下的解法是按照我看错的题意进行的,即 S=T1+S1+T2+S2+T3+S3+T4,其中 S2 是奇回文串,S1S3 相反 阅读全文
posted @ 2021-04-01 12:08 Troverld 阅读(65) 评论(0) 推荐(0) 编辑
摘要:X.CF149E Martian Strings 考虑对于每一个询问串,处理出其每个前缀在原串中出现的最左位置,以及每个后缀在原串出现的最右位置(可以通过建立正串和反串的SAM,然后维护 endpos 集合中最小/最大的结尾来在 O(|Q|) 的时间内求出),然后将两个 阅读全文
posted @ 2021-04-01 12:06 Troverld 阅读(49) 评论(0) 推荐(0) 编辑
摘要:IX.CF235C Cyclical Quest 题解 阅读全文
posted @ 2021-04-01 12:05 Troverld 阅读(28) 评论(0) 推荐(0) 编辑
摘要:VIII.CF873F Forbidden Indices 只比模板多一点点的伪模板。非常easy。 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; int n,cnt=1; char s[200100], 阅读全文
posted @ 2021-04-01 12:03 Troverld 阅读(54) 评论(0) 推荐(0) 编辑
摘要:VII.[BZOJ2555]SubString 如果要在动态建SAM的过程中同时维护parent tree中的子树和,明显需要一种支持修改树的数据结构来维护。显然,这里应该使用LCT。 维护子树和,可以考虑LCT中经典的记录虚子树和的trick。然后剩下就是俩模板的拼接了。 不知道为什么,交上去会M 阅读全文
posted @ 2021-04-01 12:01 Troverld 阅读(63) 评论(0) 推荐(0) 编辑
摘要:VI.[TJOI2015]弦论 SAM应用4:求字典序第 k 大子串。 前面说过,自动机部分接受且仅接受原串后缀,但实际上自动机中节点都是后缀的前缀,即子串。于是在自动机上先倒着拓扑DP一下,然后正着扫一遍即可求出第 k 大子串。而当相同子串计算多次时,我们知道一个子串的出现次数即为 阅读全文
posted @ 2021-04-01 11:59 Troverld 阅读(57) 评论(0) 推荐(0) 编辑
摘要:V.[APIO2014]回文串 具体分析详见本人的SA题解,这里主要是讲解使用SAM求子串出现次数的方法。 SAM应用3:查询一个子串的出现次数。 这个思想很简单,只需要找到该子串对应的 endpos 等价类是哪个即可。 我们考虑记录 idi 表示以位置 i 阅读全文
posted @ 2021-04-01 11:56 Troverld 阅读(55) 评论(0) 推荐(0) 编辑
摘要:IV.[TJOI2019]甲苯先生和大中锋的字符串 判断一个子串出现几次,我们仍然可以采取之前提到的遍历parent tree的方法。 考虑一个等价类。明显,这个等价类中所有串都出现且仅出现了(等价类出现的次数)。若这个次数恰好为 k,则从类中最长的串到最短的串,所有长度的串的数量都增加了 阅读全文
posted @ 2021-04-01 11:54 Troverld 阅读(37) 评论(0) 推荐(0) 编辑
摘要:III.[ZJOI2015]诸神眷顾的幻想乡 假如这棵树是定根的,那么其就可以被看作一棵trie,trie上本质不同子串数可以直接被建立广义SAM解决;但是这棵树不定根,路径可能拐弯,咋办呢? 发现,其保证叶子数量 20。这就意味着我们可以将以每个叶子为根所形成的trie并在一起形成 阅读全文
posted @ 2021-04-01 11:53 Troverld 阅读(49) 评论(0) 推荐(0) 编辑
摘要:II.【模板】广义后缀自动机(广义 SAM) 我们之前提到过一句话:“后缀自动机的构造是在线的,增量的。”而这题,便是其应用之一。 首先,有一种暴力的解法,是直接将所有东西全都依次插入SAM,每次插入从 1 开始。但是,这样插入完后,如果你输出构建的SAM,会发现有一些点是无法从根到达的! 阅读全文
posted @ 2021-04-01 11:51 Troverld 阅读(107) 评论(0) 推荐(0) 编辑
摘要:I.【模板】后缀自动机 (SAM) 虽说是模板但也不是纯粹板子! SAM应用1:求一个子串的出现次数(相当于字符串匹配)。 因为同一个 endpos 类中所有东西的结束集合都是相同的,故它们在母串中的出现次数也是相同的。因此,在该类中就应该贪心地选择最长的串,也即 \(\tex 阅读全文
posted @ 2021-04-01 11:28 Troverld 阅读(106) 评论(0) 推荐(0) 编辑
摘要:SAM是Suffix Automaton 萨菲克斯自动马桶的缩写,其中文翻译是后缀自动机。 顾名思义,其是一个自动机。SAM接受一个串,当且仅当其是母串 S 的后缀。 这里我们给出一些定义: 所有使用黑板粗体格式的字符 S,表示集合; 所有使用大写格式的字符 \(S 阅读全文
posted @ 2021-04-01 11:27 Troverld 阅读(194) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示