随笔分类 -  字符串-自动机

1
摘要:# 题目 有一次机灵鬼和学长可爱多打比赛, 可爱多不会做一道字符串题,机灵鬼做了很久终于做出来了,这是机灵鬼第一次做出可爱多不会的题。 可爱多觉得很丢人,于是准备研究字符串。可爱多精通 $\mathrm{kmp}$ 算法。$\mathrm{kmp}$ 算法的输入是一个字符串 $S$,该算法的核心是对 阅读全文
posted @ 2023-06-12 21:41 crashed 阅读(244) 评论(0) 推荐(1)
摘要:正在更新(指咕咕咕) 阅读全文
posted @ 2023-05-09 21:21 crashed 阅读(2113) 评论(5) 推荐(18)
摘要:「NOI2022」移除石子出题人对选手没有同理心.jpg 阅读全文
posted @ 2022-09-03 10:57 crashed 阅读(369) 评论(0) 推荐(0)
摘要:「UOJ747」面基之路 难得有一道我做得起的水题。 尝试二分答案,判定等价于检查是否存在一个点,使得在规定时间内 hehe 蚤和网友们都可以走到该点。检查能否走到某个结点是容易的,检查某条边上是否存在一个点相当于是检查集合的交集是否为空,转化成区间的并集是否覆盖了整条边,可以将区间排序之后扫描端点 阅读全文
posted @ 2022-08-10 15:53 crashed 阅读(245) 评论(1) 推荐(1)
摘要:题目 点这里看题目。 分析 ~~从一开始就知道正确的思路,到最后都没有写成正确的算法~~。 给定一个字符串 $T$,考虑怎么验证它能不能由 $S$ 和另外一个括号串合并起来。 一个自然的做法是,写一个 DP:设 $f_{i,j}$ 表示 $T[1,i]$ 能否由 $S[1,j]$ 和另一个括号串前缀 阅读全文
posted @ 2022-08-10 12:13 crashed 阅读(168) 评论(0) 推荐(1)
该文被密码保护。
posted @ 2022-05-29 11:32 crashed
摘要:题目 点这里看题目。 分析 首先自然是研究一下 \(w()\) 有没有什么比较好的性质。 这个其实猜都猜得到,\(w()\) 显然应当存在一定的倍增结构。具体地来说,我们考察一种特殊情况: 定义 \(W_{n}=w(0,2^n-1),\overline{W_n}=w(2^n,2^{n+1}-1)\) 阅读全文
posted @ 2022-05-15 17:07 crashed 阅读(350) 评论(0) 推荐(0)
摘要:题目 点这里看题目。 分析 定义 \(a\le b\) 当且仅当 \(a\) 为 \(b\) 的子串,题目就是要求 \(S[l:r]\) 的所有本质不同的子串和 \(\le\) 构成的偏序集的最小链覆盖中链的条数。 熟练地使用 Dilworth 定理,我们转而求最长反链的长度。注意到,字符串作为元素 阅读全文
posted @ 2022-05-15 16:21 crashed 阅读(81) 评论(0) 推荐(1)
摘要:自动机强迫兔子写 python,侵犯兔子兔权 阅读全文
posted @ 2022-03-28 20:00 crashed 阅读(80) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2021-07-14 21:52 crashed 阅读(0) 评论(0) 推荐(0)
摘要:题目 点这里看题目。 分析 以下标记子串的方法为: \(S[l,r]\) 表示 \(S\) 中从 \(l\) 到 \(r\) 的字符组成的子串。用 ( 表示开区间, [ 表示闭区间。 我们不难想到一个 DP : \(f(i,k)\):以 \(i\) 开始的后缀,结尾字符串长度为 \(k\) 时的最长 阅读全文
posted @ 2020-08-04 12:02 crashed 阅读(146) 评论(0) 推荐(0)
摘要:题目 比赛界面。 T1 数据范围明示直接$O(n^2)$计算,问题就在如何快速计算。 树上路径统计通常会用到差分方法。这里有两棵树,因此我们可以做“差分套差分”,在 A 树上对 B 的差分信息进行差分。在修改的时候,我们就会在 A 上 4 个位置进行修改,每次修改会涉及 B 上 4 个位置的差分修改 阅读全文
posted @ 2020-06-13 21:59 crashed 阅读(219) 评论(0) 推荐(0)
摘要:题目 点这里看题目。 分析 由于这个问题与子串相关,那么我们就先把后缀自动机给建出来。 题目条件非常特殊——“出现至少两次”。而 fail 树上一个状态的祖先状态,根据定义,至少会在当前状态中出现一次。我们便可以知道,答案所对应的状态在 fail 树上一定呈祖孙关系。 我们可以用倍增法,求出状态 \ 阅读全文
posted @ 2020-05-30 22:32 crashed 阅读(147) 评论(0) 推荐(0)
摘要:题目 点这里看题目。 分析 第一步,考虑转换一下题意。 设$a[i]$为任意字符串的第$i$个字符(从$1$标号)。对于两个在原题中要求相等的串——$s_i$和$s_{k-i+1}$。令$l=|s_i|$,\(n=|S|\),\(s_i[1]=S[p]\)(位置对应)。则: \(s_i=S[p]S[ 阅读全文
posted @ 2020-05-30 11:04 crashed 阅读(172) 评论(0) 推荐(0)
摘要:题目 点这里看题目。 分析 先对所有的模式串建立广义后缀自动机。 我们需要求出每个节点的$end-pos$集合,这个可以在 \(fail\) 树上用线段树合并快速预处理。 考虑询问。由于字符串的子串就是前缀的后缀,因此我们可以对于每个前缀,处理出它在自动机上的$LCS$对应的节点。那么一个子串在自动 阅读全文
posted @ 2020-05-29 13:31 crashed 阅读(177) 评论(0) 推荐(0)
摘要:题目 "点这里" 看题目。 分析 首先,我们不需要真的从 AC 自动机中把串删掉。由于我们计算贡献和,我们只需要在 AC 自动机上,把已经删除的串的贡献抹掉就可以了。 接着考虑询问。这是一个很基础的问题,一般我们会在 AC 自动机上面处理出每个状态的贡献和,并且将询问的字符串在 AC 自动机上面跑一 阅读全文
posted @ 2020-05-19 14:02 crashed 阅读(123) 评论(0) 推荐(0)
摘要:题目 "点这里" 看题目。 分析 首先对于模式串建立 AC 自动机,并且计算出每个状态$p$的贡献总和$con(p)$。 考虑一个朴素的 DP : $f(i,p)$:当前串长度为$i$,匹配到$p$上的最大答案。 设在$p$后加入字符$c$会转移到$t(p,c)$, DP 的转移如下: $$f(i+ 阅读全文
posted @ 2020-05-18 14:06 crashed 阅读(158) 评论(0) 推荐(0)
摘要:题目 "点这里" 看题目。 分析 我们想要建立一个只包含多个串的公共子串的后缀自动机。最简单的,先建立一个串的后缀自动机。 然后考虑如何进行扩展。在两个串的情况下,我们可以直接把另一个串放到后缀自动机上面跑,中途得到答案。在多个串的情况下显然就不会这么简单了。 考虑每一个串都放到后缀自动机上面跑一跑 阅读全文
posted @ 2020-05-16 08:45 crashed 阅读(125) 评论(0) 推荐(0)
摘要:题目 "点这里" 看题目。 分析 补习知识: 既然可以求出原串中不同的子串的个数,那么我们同样可以求出含重复子串的个数,同样是$dp$: $g(u)$:从$u$节点出发含重复的子串的数量。 转移: $$g(u)=|end pos(u)|+\sum_{(u,v)\in DAWG} g(v)$$ 因为可 阅读全文
posted @ 2020-05-16 08:43 crashed 阅读(128) 评论(0) 推荐(0)
摘要:什么是自动机 (有限状态)自动机是一种抽象的计算模型。一个有限状态自动机有有限个状态,每个状态可以迁移到一个或者多个状态。给定的字符串指定了如何转移。一个有限状态自动机可以表示为一个有向图。 对于一个自动机 \(S\)。如果对于一个串 \(A\),经过转移之后停在了一个“接收状态”那么 \(A\) 阅读全文
posted @ 2020-05-16 08:35 crashed 阅读(256) 评论(0) 推荐(2)

1