AC 自动机
占位 1
做一只大熊猫
让优秀成为一种习惯!
展开
-
acwing1053. 修复DNA(AC 自动机+dp)
题意给定 n 个子串 ti 四个字符,和一个主串 s,所有字符串仅包含 A,G,C,T,问最少需要修改几个字符,才使 s 中不包含任意一个 ti 字符串。n < 50, |s|<=1000, |ti<=20|.思路这是 y 总讲的状态机模型代码#include <bits/stdc++.h>using namespace std;#define db double#define ll long long#define Pir pair<in原创 2021-11-03 11:55:46 · 180 阅读 · 0 评论 -
acwing1285. 单词
题目链接题意给出 n 个单词,询问每个单词 i(i>=1 && i <= n), 在 n 个单词中出现的次数是多少?思路建立 ac 自动机,代码#include <bits/stdc++.h>using namespace std;const int N = 3e6 + 5;char s[N];int tr[N][26], ne[N], idx;int f[N], id[N];vector<int> v;void i原创 2021-10-30 20:47:22 · 102 阅读 · 0 评论 -
acwing1282. 搜索关键词(AC 自动机)
题目链接题意给定 n 个单词,和一个字符串 s,问 n 个单词中有多少个在 s 中出现了。思路明细 ac 自动机模板题,我们先把 n 个单词建立 ac 自动机树,然后统计每个单词在每个单词在相应的结尾上出现的次数(在单词结尾的位置打上标记)。然后用 s 在自动机树上进行匹配,对于每配到一个位置节点,我们都沿着这个节点,while 循环跳这个点的 fail 指针,如果每跳到一个点就就加上一个这个点结尾的单词的个数。代码#include <bits/stdc++.h>usin原创 2021-10-30 19:36:08 · 181 阅读 · 0 评论 -
Singing Superstar HDU - 7064模式串不重叠出现的次数——AC 自动机模板
题目链接题意给我 1 个主串 S 和 n 个模式串 T,问对于每个模式串 T,在 S 中出现的次数是多少,要求出现的 T 串不能相交思路在 ac 自动机的基础上添加一个 last [] 数组,对于 trie 树的节点 x,last [x] 表示以 x 结尾的前缀串的上一次出现的位置,2. 又 ac 自动机的基础上添加一个 dep [] 数组,dep [x] 表示以 x 节点的结尾的前缀的长度通过字符串两次出现的长度差值 i−last[x]>=dep[x]i-last[x] >=原创 2021-08-21 17:05:00 · 182 阅读 · 1 评论 -
单词 黑暗爆炸 - 3172(AC自动机+ 拓扑dp)
题目链接Description某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。Input第一个一个整数 N, 表示有多少个单词,接下来 N 行每行一个单词。每个单词由小写字母组成,N<=200, 单词长度不超过 10^6Output输出 N 个整数,第 i 行的数字表示第 i 个单词在文章中出现了多少次。Sample Input3aaaaaaSample Output631题意给我们 n 个字原创 2021-08-21 09:26:25 · 67 阅读 · 0 评论