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

posted @ 2020-04-19 11:06 wxyww 阅读(110) 评论(0) 推荐(0) 编辑
摘要:"题目链接" solution 正难则反√ 考虑如何计算长度为$m$的字符串中不包含所给集合中任意一个串的方案数。 先将所给的所有串建出$AC$自动机。 用$f[i][j]$表示长度为$i$的字符串,第$i$个位置对应$AC$自动机中的第j个位置且不包含所给集合中任意一个串的方案数。 然后枚举每一位 阅读全文
posted @ 2020-04-19 10:20 wxyww 阅读(79) 评论(0) 推荐(0) 编辑
摘要:"题目链接" solution 容易想到将集合中的所有串建出AC自动机。然后用$f[i][j][0/1]$表示前$i$个位置是(1)否(0)为上界,第$i$个位置对应AC自动机中的$j$号点的方案数。 转移就枚举当前位置填的数字转移即可。 有两个需要注意的地方: 如果某个位置可以通过fail指针跳到 阅读全文
posted @ 2020-04-19 08:28 wxyww 阅读(119) 评论(0) 推荐(0) 编辑
摘要:"题目链接" solution 将所有的单词建出AC自动机。然后用母串在上面走,并且记录下在母串中的每个位置对应到AC自动机上的位置。当走到一个单词的结尾时,就回到这个单词长度之前的位置。 问题在于如何找到这个单词长度之前的位置。我们用个栈来记录答案,每找到一个长度为len的单词,就从栈顶弹出len 阅读全文
posted @ 2019-08-24 07:57 wxyww 阅读(393) 评论(0) 推荐(0) 编辑
摘要:"题目链接" problem 有$n$个字符串,对于第$i$个字符串通过以下两种方式中的一个给出。 1. $1\; c$,该字符串只含一个字符$c$。 2. $2\ x\ c$,该字符串为第$x(1\le x include include include include include inclu 阅读全文
posted @ 2019-02-01 20:18 wxyww 阅读(214) 评论(0) 推荐(0) 编辑
摘要:题目链接 题意 给出$n$个字符串,要构造一个长度为$m$的字符串$S$,使得给出的$n$个字符串中至少有一个是$S$的子串。问方案数。 思路 $AC$自动机+$DP$ 考虑至少有一个是S的子串不好考虑。考虑用全部情况减去其中不包含任何一个字符串的情况。 全部情况就是$26^m$,然后考虑怎么求出不 阅读全文
posted @ 2019-02-01 16:34 wxyww 阅读(152) 评论(0) 推荐(0) 编辑
摘要:题目链接 思路 可以发现,其实题目中所描述的操作,就是在$AC$自动机上走的过程。输出就是打上标记。删除就是返回父亲节点。 然后看询问。每次询问字符串$x$在字符串中$y$出现的次数。其实也就是问在$AC$自动机上的$y$这个字符串上,有多少位置的$fail$指针指向$x$的结尾。 所以想到将$fa 阅读全文
posted @ 2019-01-31 10:50 wxyww 阅读(161) 评论(0) 推荐(0) 编辑
摘要:题目链接 题意 给出一个$n$个字符串的字典。对于一个字符串,他的贡献是这个字符串中最多的在字典中出现的不重叠子串的数量。 然后问一个长度为$len$的,字符集为前$alphabet$个字符的字符串的贡献期望是多少。 思路 首先想如果这个长度为$len$的字符串已经给出了。应该怎么算贡献。 只要贪心 阅读全文
posted @ 2018-12-17 17:21 wxyww 阅读(217) 评论(0) 推荐(0) 编辑
摘要:题目链接 题意 读完题目就一个感受:这出题人tm不会说人话吗。真的感觉这个题理解题意比想出正解更难。 其实题目的意思就是,给出一些单词,给这些单词编个号,然后要求其他的单词中是这个单词后缀的词都在这个词的前面。每个单词的贡献是当前单词的标号减去他的后缀中标号最大的那个的标号。 希望我能表达明白吧23 阅读全文
posted @ 2018-12-17 10:06 wxyww 阅读(200) 评论(0) 推荐(0) 编辑
摘要:题目链接 思路 这道题我用的是AC自动机的做法。 先把子串挂到trie树上,在单词结尾打标记的时候,标记的是当前单词的长度。然后去上面查询母串的时候,每查询到一个单词,就建立一条线段,这条线段的结尾位置是母串当前的位置,开始位置就是用当前位置减去这个单词的长度。 然后只要去判断,选出一些线段,使得这 阅读全文

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