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. The German Collegiate Programming Contest 2017

    B - Building 给一个m各面的多边形柱体,每一侧面有n*n个格子,现在对这些格子染色,看有多少种方式使得多面柱体无论如何旋转都不会与另一个一样. #include <bits/stdc ...

  2. oc与swift比较

    swift试是用语言层面的雕虫小技和oc的机制大道进行pk. 从整体上来说,oc是一个更加优秀的语言.

  3. Eclipse中修改GIT分支名称

    修改GIT分支名称: 1.切换到要修改名称的分支: 2.右击项目——Team——Advanced——Rename Branch…: 3.在弹出的Branch Rename框中选中要修改名的分支——Re ...

  4. C语言基本语法——变量

    1.变量作用域 2.局部变量 3.全局变量 4.变量生命周期 5.auto关键字 6.static关键字 1.变量作用域 • 变量作用域是指变量的有效范围 • 变量作用域是定义变量从何处被创建,到何处 ...

  5. JAVA 多线程知识总结(一)

    一,线程的生命周期以及五种基本状态 关于JAVA线程的生命周期,首先看一下下面这张图 上图中基本上囊括了Java中多线程各重要知识点.掌握了上图中的各知识点,Java中的多线程也就基本上掌握了. Ja ...

  6. 【【henuacm2016级暑期训练】动态规划专题 L】Civilization

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 给一个森林. 就是由很多棵树组成.. 然后会询问你其中一棵树的最长链. 初始状态的最长链可以用两遍dfs分别找最长路得到. 然后要求 ...

  7. [terry笔记]文件操作

    如下记录一次作业: 很显然,我这个应该属于二逼青年版,会在以后更新文艺青年版的答案. 1.模仿sed,一个文件中,用新字符串替换老字符串. # file = input("file_name ...

  8. PatentTips - Safe general purpose virtual machine computing system

    BACKGROUND OF THE INVENTION The present invention relates to virtual machine implementations, and in ...

  9. 在CentOS6.5下配置安装LVS

    先上一个图,在内网测试机上安装了一个虚拟机,已经安装好了CentOS 乖乖连wget都没有安装,先安装wget吧 sudo yum install wget

  10. oauth2.0里回调地址返回code中如何让code不显示在URL里?

    背景: 最近在调用对方提供的oauth2.0接口的时候,返回code在URL显示,但是会影响到本系统调用其他的菜单项的操作,所以想把返回的code值去掉. 解决办法:     想了各种解决办法,目前把 ...