自动机
文章平均质量分 76
好东西
。十二。
这个作者很懒,什么都没留下…
展开
-
【Ybtoj 第26章例2】单词频率【AC自动机】
解题思路某字符串在论文中出现多少次=某字符串在每个单词中出现的次数之和跑一边ACACAC自动机,设sum[i]sum[i]sum[i]表示节点i到根节点的字符串是多少个单词的子串,所以初始时将插入字符时,将途中经过的节点sum[i]++sum[i]++sum[i]++。知道fail[i]fail[i]fail[i]到根形成的字符串也一定是那个单词的子串sum[i]+=sum[fail[i]]sum[i]+=sum[fail[i]]sum[i]+=sum[fail[i]]代码#include...原创 2021-08-12 22:47:56 · 118 阅读 · 0 评论 -
回文自动机TOT
目录浅谈回文树构建failCODE浅谈和AC自动机一样,回文自动机也要有一颗树把回文串“串起来”,我们知道一个长的回文串去掉他的两头,能得到一个短回文串,我们利用回文字符串这样性质把他们折叠挂在树上。但是长度为奇数的回文子串 有中心,而长度为 偶数的回文子串没有,我们要把长度为奇数、偶数的分开挂着。000代表偶数长度的根,111代表奇数长度的根。所以说回文自动机的结构就是两颗树,又称回文Trie树。它和trie一样,把信息存储在边上。不同点是它的每个节点(除了根)都表示一个回文串,容易证明任意原创 2021-08-11 22:32:33 · 176 阅读 · 0 评论 -
【洛谷 P3796 】AC自动机(加强版)
解题思路我笑了,加强版和减弱版基本毫无区别。。。》》AC自动机板子首先题目统计的是出现次数最多的字符串,所以有重复的字符串是没有关系的。那么我们就将标记模式串的flag设为当前是第几个模式串。就是下面插入时的变化:trie[p].cnt++;变为trie[p].v=num; //num表示该字符串是第num个输入的求Fail指针没有变化,原先怎么求就怎么求。查询:我们开一个数组vis,表示第i个字符串出现的次数。因为是重复计算,所以不能标记为-1了。我们每经过一个点,如果有模式串标..原创 2021-08-11 22:05:05 · 144 阅读 · 0 评论 -
AC自动机TOT
目录浅谈建树与插入构建fail边匹配查询CODE浅谈AC自动机是啥?是一个能够让你自动AC的算法哦,不,是一个关于字符串匹配的算法提到字符串匹配,大家应该都会想到KMP(既然来学AC自动机了,应该没有不知道的吧),如果你听说过KMP,你应该对一个模式串匹配一个文本串的问题了如指掌不过,对于多个模式串,好多好多个模式串呢?你也许会想到对每个模式串都KMP一遍,但直觉告诉你,这样是不可能AC的。于是,AC自动机就派上用场了当然,要学习AC自动机,你还需要掌握一种数据结构——Trie树整个AC原创 2021-08-11 21:55:17 · 129 阅读 · 0 评论