AC自动机
qq_38232157
这个作者很懒,什么都没留下…
展开
-
HOJ 3065 病毒侵袭持续中(AC自动机,求多个子串在主串中出现次数)
AC自动机,求多个子串在主串中出现次数 本题要点: 1、与HOJ2896 的区别主要是,这里要求每个子串在文本串的出现次数。 num[i] 表示第i个病毒出现的次数。 在 query 函数中 for(int j = now; j; j = fail[j]) //这里访问一个节点 j 后,不需要把 virus_id[j]置零 { num[virus_id[j]]++; } 2、很多老哥提醒,多组数据。 注意 memset trie, fail, num 数组 #include <cstdio>原创 2020-08-22 19:16:32 · 100 阅读 · 0 评论 -
HOJ 2896 病毒侵袭(AC自动机,模板题)
AC自动机,模板题 本题要点: 1、把多个病毒串,建立 trie, 其中数组virus_id[k] 表示节点是k的点对应的病毒编号 2、建立 fail 数组 3、有m个文本串,没依次查询,都会把数组virus_id[k]对应的值赋值为0,防止重复遍历。 所以,查询完后,需要把数组 virus_id 的数据恢复原来的样子。我这里用的很 low 的方法,直接开一个 数组 virus_id 的副本 virus_id1 。 4、一些注意的地方: 字符串是可见字符,并不只是小写字母。 字典树是 trie[MaxL]原创 2020-08-22 17:10:11 · 164 阅读 · 0 评论 -
HOJ 2222 Keywords Search(AC自动机,模板题)
AC自动机,模板题, 参考:https://blog.csdn.net/bestsort/article/details/82947639 题目意思: 给出若干字符串,最后给出一个大的文本字符串,求前面的字符串,在文本字符串中一共出现了多少次 本题要点: 1、AC自动机 用若干模式串,建立字典树,同时为每一个字典树的每一个节点,建立 fail 数组。 2、查询文本串, 统计文本串中出现的模式串的次数。 #include <cstdio> #include <cstring> #inc原创 2020-08-05 21:52:34 · 83 阅读 · 0 评论