AC自动机
CantSayAWord
这个作者很懒,什么都没留下…
展开
-
浅谈AC自动机(Aho-Corasick automaton算法)
前置技能KMP&&TrieAC自动机简介AC自动机全称Aho-Corasick automaton算法,是1975由贝尔实验室发明的一种多模式匹配的算法。常用于给定多个模式串并要求匹配的一类问题中。算法介绍我们先由一个问题开始:给出m个字符串,再给出一个字符串S,问,S中出现了多少次前面给出的字符串? 根据我们以往的做法,除了暴力,一个比较容易想到的做法就是先把m个字符串插入到一棵Trie中,然后原创 2017-07-31 18:01:18 · 948 阅读 · 0 评论 -
HDU 6096 String(2017 Multi-University Training Contest 6)
题目链接:String 题意:给定NN字符串以及QQ个询问,每一个询问包括一个前缀和一个后缀,在前后缀不重叠的情况下,有多少个字符串有这个前缀和后缀。 题解:把每一个询问以“后缀+‘{’+前缀”形式连接起来组成新的字符串,并用这些字符串构成AC自动机,同时记录原询问的长度,最后把原来的NN个字符串在AC自动机中跑一遍记录长度满足条件的就能得到答案。由于可能有相同的询问,所以可以利用map或者并查原创 2017-08-16 14:33:36 · 342 阅读 · 0 评论 -
HDU 6086 Rikka with String(2017 Multi-University Training Contest 3)
题目链接:Rikka with String 题意:给定nn个0101字符串和一个长度LL,问所有长度为2∗L2*L的反对称字符串(s[i]≠s[|s|−i+1],i∈[1,|s|]s[i]≠s[|s|−i+1],i∈[1,|s|])中出现所有给定字符串的种类数。 题解:我们先考虑一个简化版的问题:所有长度为LL的字符串中出现所有给定字符串的种类数。这就是一个基本的AC自动机上dpdp的问题,记原创 2017-08-16 21:23:01 · 429 阅读 · 0 评论 -
HDU 6138 Fleet of the Eternal Throne(2017 Multi-University Training Contest 8)
题目链接:Fleet of the Eternal Throne 题意:给出nn个字符串,mm次询问,每一次询问一个(x,y)(x,y),问第xx和第yy个字符串的最长公共部分使得这个部分是某一个字符串的前缀。 题解:注意到如果两个字符串同时匹配到了某一个前缀,那么这个前缀的长度就可以用来更新答案,所以我们可以直接根据前缀建立AC自动机,然后对于每次询问在AC自动机上匹配,用setset判断是否原创 2017-08-17 17:17:32 · 711 阅读 · 0 评论