![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AC自动机
吴俊达9812
这个作者很懒,什么都没留下…
展开
-
bzoj 1212: [HNOI2004]L语言
AC 自动机模板#include <bits/stdc++.h>using namespace std;const int maxn = 2000000;const int N = 500;int ch[N][26],tot,f[N], // fail 树上的父节点len[N], val[N], // 是...原创 2019-08-28 14:16:44 · 109 阅读 · 0 评论 -
bzoj 3172: [Tjoi2013]单词
fail 树的应用一个节点代表的是一个字符串的前缀,那么我们首先需要统计每一个节点作为前缀出现了多少次。然后,一个节点在fail树上的后代节点代表的是这个前缀是某一个前缀的后缀,那么这个单词一定也会出现在这些后缀中。所以我们需要把后代节点的贡献也加到这个节点中。建立AC自动机时节点的入队的顺序反过来就可以统计了。#include <bits/stdc++.h>...原创 2019-08-28 15:03:22 · 146 阅读 · 0 评论 -
「BZOJ1030」[JSOI2007] 文本生成器
AC自动机上dpsolution 1 :按照字符串的长度进行dp的(字符串的长度放在最外层)#include <bits/stdc++.h>using namespace std;const int maxn = 105;const int N = 6005;int ch[N][26],tot,f[N],cnt[N],val[N],last[N];void i...原创 2019-08-28 16:53:26 · 131 阅读 · 0 评论 -
bzoj 2434: [Noi2011]阿狸的打字机
fail树的dfs序统计子树节点的个数。#include <bits/stdc++.h>using namespace std;const int maxn = 100005;const int N = 200000;int ch[N][26],tot,f[N],cnt[N],last[N];void init(int n){ tot = 0; mems...原创 2019-08-28 21:16:29 · 105 阅读 · 0 评论 -
poj 3691 DNA repair
记忆化搜索+AC自动机我这题犯的最大的错误就是 写记忆化搜索的时候,进去之后就将dp值赋为0,这样如果后面没有可行方案的话dp值还是0。多组测试样例的模板#include <map>#include <queue>#include <cstring>#include <cstdio>using namespace std;co...原创 2019-08-28 22:39:04 · 137 阅读 · 0 评论 -
codeforces 1163D(AC自动机dp)
题意:给定一个文本串,两个模式串,将文本串的*替换为26个 字母,使得第一个模式串出现的次数减去第二个模式串出现的次数的差值最大。思路:fail树的应用 我们对两个模式串建立AC自动机,并计算出每个状态的权值。每个状态的权值定义为其fail树上一直到根节点的权值之和。原因为走到这个节点,就相当于到根节点路径上的的所有前缀都已经访问过了。 #include &l...原创 2019-10-10 17:10:31 · 312 阅读 · 0 评论