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. swift使用查阅资料备份2

    Swift3.0朝圣之路-Then协议库-绝妙的初始化方式 https://www.jianshu.com/p/6cc1e21df6ac DisposeBag http://southpeak.git ...

  2. Simula-Virtual function

    Simula is the name of two simulation programming languages, Simula I and Simula 67, developed in the ...

  3. C++的头文件(转)

    这几天在写比较困难的一部分,所以也没有时间总结一些东西了,不过昨天翻我的笔记本,发现了一篇还不错的笔记,给大家看看. C/C++头文件一览 C.传统 C++ #include <assert.h ...

  4. ZBrush中标准几何体与Polymesh

    通过对ZBrush的学习,相信您已经对这款软件有了一定的了解,文本我们主要学习ZBrush®的3D物体标准几何体的特性和使用方法.在ZBrush中只有Polymesh(多边形网格)物体才能使用雕刻笔刷 ...

  5. ZBrush通过显示与隐藏得到子物体

    在ZBrush®中得到子物体的方法有很多,本文将为大家介绍一种新的创建子物体的方法,通过显示和隐藏得到子物. ZBrush 4R8中文版下载:http://wm.makeding.com/iclk/? ...

  6. nginx虚拟主机的配置不生效

    这个坑找了好久,今天终于找到了问题所在. 一般虚拟主机配置文件是vhost里面单独写一个网站名.conf,然后在nginx最后include vhosts/*.conf 引用. 但是我这里的vhost ...

  7. android 读取xml

    在有些应用中,有一点小数据.直接存储在XML就是.实现较为简单, 1.xml文件放入asset目录.结构如: <?xml version="1.0" encoding=&qu ...

  8. jQuery中focusin()和focus()、find()和children()的差别

    jQuery中focus()和focusin().focus()和children()的差别 focus()和focusin() focus()和focusin()的差别在于focusin()支持事件 ...

  9. 使用dispatch_once实现单例

    很多人实现单例会这样写: @implementation XXClass + (id)sharedInstance { static XXClass *sharedInstance = nil; @s ...

  10. m_Orchestrate learning system---八、下拉列表(select标签)如何实现链接功能

    m_Orchestrate learning system---八.下拉列表(select标签)如何实现链接功能 一.总结 一句话总结:option的值就是链接地址,选择事件为指向选中的option的 ...