AC自动机

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define MAX 100001
#define u(n) (n-'a')
using namespace std;
struct ac{
int son[],fail,sum;
void init(){
memset(son,,sizeof(son));
sum=;
}
}a[];
queue<int>q;
int last[],ans=,n,tot=,len;
char st[],sp[][];
void init(){
for(char i='a';i<='z';i++){
if(a[].son[u(i)]){
q.push(a[].son[u(i)]);
a[a[].son[u(i)]].fail=;
}
}
while(!q.empty()){
for(char i='a';i<='z';i++){
if(a[q.front()].son[u(i)]){
q.push(a[q.front()].son[u(i)]);
int now=a[q.front()].fail;
while(now&&!a[now].son[u(i)]) now=a[now].fail;
if(a[now].son[u(i)]) a[q.back()].fail=a[now].son[u(i)];
else a[q.back()].fail=;
if(a[a[q.back()].fail].sum){
last[q.back()]=a[q.back()].fail;
}else{
last[q.back()]=last[a[q.back()].fail];
}
}
}
q.pop();
}
}
void ins(char st[]){
int s=;
for(int i=;i<strlen(st);i++){
if(a[s].son[u(st[i])]==){
a[s].son[u(st[i])]=++tot;
a[tot].init();
s=tot;
}else{
s=a[s].son[u(st[i])];
}
}
a[s].sum++;
}
void inc(int now){
if(a[now].sum){
ans+=a[now].sum;
a[now].sum=;
}
while(last[now]){
ans+=a[last[now]].sum;
a[last[now]].sum=;
now=last[now];
}
}
void solution(int len){
int now=;
for(int i=;i<=len;i++){
if(a[now].son[u(st[i])]){
now=a[now].son[u(st[i])];
}else{
while(now&&!a[now].son[u(st[i])]) now=a[now].fail;
if(a[now].son[u(st[i])]) now=a[now].son[u(st[i])];
}
inc(now);
}
}
int main(){
scanf("%d",&n);
a[].init();
a[].fail=;
for(int i=;i<=n;i++){
scanf("%s",sp[i]);
ins(sp[i]);
}
scanf("%s",st);
len=strlen(st);
init();
solution(len);
printf("%d",ans);
return ;
}

AC自动机笔记的更多相关文章

  1. AC自动机详解 (P3808 模板)

    AC自动机笔记 0.0 前言 哇,好久之前就看了 KMP 和 Trie 树,但是似乎一直没看懂 AC自动机?? 今天灵光一闪,加上之前看到一些博客和视频,瞬间秒懂啊... 其实这个玩意还是蛮好理解的. ...

  2. AC自动机学习笔记-2(Trie图&&last优化)

    我是连月更都做不到的蒟蒻博主QwQ 考虑到我太菜了,考完noip就要退役了,所以我决定还是把博客的倒数第二篇博客给写了,也算是填了一个坑吧.(最后一篇?当然是悲怆のnoip退役记啦QAQ) 所以我们今 ...

  3. AC自动机板子题/AC自动机学习笔记!

    想知道484每个萌新oier在最初知道AC自动机的时候都会理解为自动AC稽什么的,,,反正我记得我当初刚知道这个东西的时候,我以为是什么神仙东西,,,(好趴虽然确实是个对菜菜灵巧比较难理解的神仙知识点 ...

  4. 「笔记」AC 自动机

    目录 写在前面 定义 引入 构造 暴力 字典图优化 匹配 在线 离线 复杂度 完整代码 例题 P3796 [模板]AC 自动机(加强版) P3808 [模板]AC 自动机(简单版) 「JSOI2007 ...

  5. [AC自动机]【学习笔记】

    Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...

  6. AC自动机学习笔记

    AC自动机 ----多个模板的字符串匹配 字典树Trie加上失配边构成 插入操作:ac.insert(p[i],i);构造失配函数:ac.getFail();计算文本串T中每个模板串的匹配数:ac.f ...

  7. 「AC自动机」学习笔记

    AC自动机(Aho-Corasick Automaton),虽然不能够帮你自动AC,但是真的还是非常神奇的一个数据结构.AC自动机用来处理多模式串匹配问题,可以看做是KMP(单模式串匹配问题)的升级版 ...

  8. [AC自动机][学习笔记]

    用途 AC自动机适用于一类用多个子串在模板串中匹配的字符串问题. 也就是说先给出一个模板串,然后给出一些子串.要求有多少个子串在这个模板串中出现过. KMP与trie树 其实AC自动机就是KMP与tr ...

  9. 算法笔记--字典树(trie 树)&& ac自动机 && 可持久化trie

    字典树 简介:字典树,又称单词查找树,Trie树,是一种树形结构,是哈希树的变种. 优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较. 性质:根节点不包含字符,除根节点外每一个 ...

随机推荐

  1. Java从入门到精通一步到位!

    Java作为近几年来非常火的编程语言,转行来做Java的人不计其数,但如今真正的人才仍然匮乏,所以学习Java一定要有一个系统的学习规划课程.阿里云大学帮您规划Java学习路线可以帮助您从一个小白成长 ...

  2. 记录——本地minikube安装ubuntu镜像总是报 Back-off restarting failed container问题 -已解决(更新)

    1.环境介绍 使用本机系统:macX minikube镜像:安装的阿里云提供的镜像(否则总是提示访问google的api,不FQ无法成功) 虚拟机情况:使用Virtual box 的虚拟机环境 min ...

  3. HDU 2604 Queuing( 递推关系 + 矩阵快速幂 )

    链接:传送门 题意:一个队列是由字母 f 和 m 组成的,队列长度为 L,那么这个队列的排列数为 2^L 现在定义一个E-queue,即队列排列中是不含有 fmf or fff ,然后问长度为L的E- ...

  4. 命令行导入导出Mysql数据库

    MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录,如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serve ...

  5. STM32 SPI 发送第一个数据不成功问题

    STM32的标准库,跟HAL库都是很实用的, 在使用SPI库的过程中一定要注意时序的问题. 我在调试SPI过程中,调试了两个IC,都是用HAL库, 第一个IC没出问题,第二个IC出现了第一次发送数据不 ...

  6. 关于Vue实例的生命周期(2)

     关于Vue实例的生命周期(2) 创建(create)->挂载(mount)->更新(update)->销毁(destory) 钩子函数触发事件 beforeCreate 在实例初始 ...

  7. 【codeforces 794A】Bank Robbery

    [题目链接]:http://codeforces.com/contest/794/problem/A [题意] 每个位置上可能有物品(>=1)或是没物品 你一开始在某一个位置b; 然后你最左可以 ...

  8. 循环语句第1种 LOOP ... END LOOP;

     7)循环语句  --------第1种----------   LOOP ... END LOOP;    declare    n number(3) := 1;  begin    LOOP   ...

  9. Nutch的配置(使用MySQL作为数据存储)

    首先先从http://www.apache.org/dyn/closer.cgi/nutch/下载安装包 这里假定nutch的根目录为:${APACHE_NUTCH_HOME} 配置${APACHE_ ...

  10. 洛谷——P3398 仓鼠找sugar

    https://www.luogu.org/problem/show?pid=3398#sub 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴 ...