AC自动机
穷源溯流
路很长,尽管走便是。
展开
-
ZOJ 3430 Detect the Virus(AC自动机)
给出 n 个模式串以 base64 编码,再给出 m 个文本串以 base64 编码,问这 m 个文本串中出现过多少次模式串 题目若是没有以 base64 编码为条件就是一道 AC自动机的模板题,但是区区一个编码就变成了自闭题 首先搞清楚 base64 编码的规则,题目中已经给出了 hello 的样例,就是将 hello 的 acsll 码转化为二进制,然后每 6 位按题目中给出的表进行对字符进行转化,= 忽略即可 而题目要求我们求文本串的匹配,自然要将给出的 base64 进行解码,由...原创 2021-02-23 11:16:48 · 166 阅读 · 1 评论 -
洛谷 P3041 [USACO12JAN]Video Game G(AC自动机+DP)
题目不难想到要应用 DP,建好 AC自动机之后 dp[i][j] 表示到第i 个字符标号为j 的节点时最大的连击数是多少 dp 方程也不难想 由于本人实力欠缺,dp 数组的初始化为什么要设为 -1 没想明白,先给自己挖个坑 QAQ const int N=300+5; int n,m; int i,j,k; char s[N]; int t[N][3],tot=0; int vis[N],f[N]; int dp[(int)1e3+5...原创 2021-02-22 21:20:12 · 225 阅读 · 0 评论 -
HDU 3065 && 多校2009 病毒侵袭持续中(AC自动机)
AC自动机 构建完之后,由于特征码都不相同,所以沿着失配边走逐个统计即可 注意有多组输入 const int N=1e5+5; int n,m; int i,j,k; char s[(int)1e3+5][55]; int tot=0,t[N][128]; int vis[N],f[N]; int ans[N]; char ch[(int)2e6+5]; void insert(char *s,int id) { int r...原创 2021-02-21 11:19:14 · 168 阅读 · 2 评论 -
HDU2896 && 多校2009 病毒侵袭(AC自动机)
利用 ac自动机 将源码字符串中出现的特征码找出来,用 set 存储即可 const int N=1e5+5; int n,m; int i,j,k; char s[N]; int tot=0,t[N][128]; int vis[N],f[N]; set<int> all; void insert(char *s,int id) { int rt=0; for(int i=0;s[i];i++){ ...原创 2021-02-21 10:19:56 · 173 阅读 · 0 评论 -
洛谷 P3796 【模板】AC自动机(加强版)
题目要求出现最多的模式串及次数,我们目前可以利用 AC 自动机找到一个东西,那就是模式串 这样不就好解决了吗?利用一个数组存取每一个模式串的出现次数,最后在统计一边就可以了 const int N=1e6+5; int n,m; int i,j,k; char s[N]; int f[N]; int t[N][26],tot=0; int vis[N]; char ch[155][75]; int ans[N]; int ...原创 2021-02-18 22:07:49 · 253 阅读 · 0 评论 -
洛谷 P3808 【模板】AC自动机(简单版)
AC 自动机模板题 不做详细解释,但是强调几个代码中需要注意到的地方 AC 自动机第一步利用字典树将模式串放入树中 第二步利用 BFS 构建 fail 指针,构造 fail 指针时需要注意,构建节点 u(x代表节点 u 中的字母)的 fail 指针时,是在其父节点位置时构造的,当 x存在时,其 fail 指针指向其父节点 fail 指针中的 x节点;而当 x不存在时,只要将 u 指向其父节点 fail 指针中的 x节点,这样可以在后续查找当中从字典树的底部跳到树顶(不明白...原创 2021-02-18 20:42:56 · 601 阅读 · 0 评论