方法就是维护一个动态栈 记录栈的每一位匹配到串的哪一位的编号 第一道kmp第二道ac自动机 自己理会
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=;
char stack[M],s[M],t[M],f[M],next[M];
int len,top;
void getfail(){
for(int i=;i<len;i++){
int j=f[i];
while(j&&t[i]!=t[j]) j=f[j];
f[i+]=(t[i]==t[j]?j+:);
}
}
int main()
{
scanf("%s %s",s,t);
int L=strlen(s); len=strlen(t); getfail();
for(int i=;i<L;i++){
stack[++top]=s[i];
int j=next[top-];
while(j&&t[j]!=stack[top]) j=f[j];
if(t[j]==stack[top]) j++;
next[top]=j;
if(j==len) top-=len;
}
for(int i=;i<=top;i++) printf("%c",stack[i]);
return ;
}
//同bzoj3942
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int size=,M=;
char s[M],T[M],stack[M];
int next[M],top,n;
struct node{
int sum,a[M][],last[M],fail[M],val[M];
int id(char s) {return s-'a'+;}
void insert(char s[]){
int k=,L=strlen(s);
for(int i=;i<L;i++){
int now=id(s[i]);
if(!a[k][now]) a[k][now]=++sum;
k=a[k][now];
}
val[k]=L;
}
void getfail(){
int q[M],k=,head=,tail=;
for(int i=;i<=;i++){
int now=a[][i];
if(now) q[tail++]=now;
}
while(head!=tail){
int x=q[head++];
for(int i=;i<=;i++){
int now=a[x][i];
if(!now) { a[x][i]=a[fail[x]][i];continue;}
q[tail++]=now;
fail[now]=a[fail[x]][i];
last[now]=val[fail[now]]?fail[now]:last[fail[now]];
}
}
}
void Ac_boy(){
int now=,L=strlen(T);
for(int i=;i<L;i++){
int d=id(T[i]);
stack[top]=T[i];
now=a[now][d];
next[top]=now;
if(val[now]) top-=val[now],now=next[top];
else if(last[now]) top-=val[last[now]],now=next[top];
top++;
}
}
}node;
int main()
{
scanf("%s",T);
int n; scanf("%d",&n);
while(n--) scanf("%s",s),node.insert(s);
node.getfail(); node.Ac_boy();
for(int i=;i<top;i++) putchar(stack[i]);
return ;
}

bzoj3940&&bzoj3942 Ac自动机||kpm算法的更多相关文章

  1. Aho-Corasick automaton(AC自动机)解析及其在算法竞赛中的典型应用举例

    摘要: 本文主要讲述了AC自动机的基本思想和实现原理,如何构造AC自动机,着重讲解AC自动机在算法竞赛中的一些典型应用. 什么是AC自动机? 如何构造一个AC自动机? AC自动机在算法竞赛中的典型应用 ...

  2. 算法总结篇---AC自动机

    目录 写在前面 算法流程 引例: 概述: Trie树的构建(第一步) 失配指针(第二步) 构建失配指针 字典树和字典图 多模式匹配 例题 写在前面 鸣谢: OiWiki 「笔记」AC 自动机---Lu ...

  3. hihocoder第218周:AC自动机

    题目链接 问题描述 给定n个单词,给定一个长字符串s,单词总长度和字符串s的长度都不超过1e5.要求把s中所有的出现单词的位置用*替代. 例如: 样例输入 2 abc cd abcxyzabcd 样例 ...

  4. 【BZOJ3940】【BZOJ3942】[Usaco2015 Feb]Censoring AC自动机/KMP/hash+栈

    [BZOJ3942][Usaco2015 Feb]Censoring Description Farmer John has purchased a subscription to Good Hoov ...

  5. AC自动机-算法详解

    What's Aho-Corasick automaton? 一种多模式串匹配算法,该算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一. 简单的说,KMP用来在一篇文章中匹配一个模式串:但 ...

  6. AC自动机算法详解

    首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章, ...

  7. AC自动机——多模式串匹配的算法思想

    标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...

  8. 经典算法题每日演练——第八题 AC自动机

    原文:经典算法题每日演练--第八题 AC自动机 上一篇我们说了单模式匹配算法KMP,现在我们有需求了,我要检查一篇文章中是否有某些敏感词,这其实就是多模式匹配的问题. 当然你也可以用KMP算法求出,那 ...

  9. 算法模板——AC自动机

    实现功能——输入N,M,提供一个共计N个单词的词典,然后在最后输入的M个字符串中进行多串匹配(关于AC自动机算法,此处不再赘述,详见:Aho-Corasick 多模式匹配算法.AC自动机详解.考虑到有 ...

随机推荐

  1. 用URL传参带特殊字符,特殊字符丢失

    文章:URL中编码URL特殊字符 文章:用URL传参带特殊字符,特殊字符丢失(encode) 如果url中有特殊字符,需要对url进行编码,否则特殊字符丢失,导致最终接收到的值不对.

  2. vue-cli项目里npm安装使用elementUI

    第一步:进入到项目目录里 npm i element-ui -S 第二步:在main.js中引入 import ElementUI from 'element-ui' import 'element- ...

  3. SpringBoot事件监听

    代码演示: package com.boot.event.eventdemo; import org.springframework.boot.SpringApplication; import or ...

  4. hash 默认使用equal进行元素比较 防止元素重复

    hash 默认使用equal进行元素比较 防止元素重复

  5. 第三方框架-纯代码布局:Masonry的简单使用

    Masonry是一个对系统NSLayoutConstraint进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者API.系统AutoLayout支持的操作,Masonry都支持,相比系统AP ...

  6. 【bzoj4326】[NOIP2015]运输计划 二分答案+LCA

    题目描述 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家物流公司, 该 ...

  7. Javascript 中 == 和 === 区别是什么?

    Javascript 中 == 和 === 区别是什么? 作者:Belleve链接:https://www.zhihu.com/question/31442029/answer/77772323来源: ...

  8. springboot 在tomcat中启动两次

    我开始以为眼花了,tomcat启动的时候, .   ____          _            __ _ _ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \( ...

  9. 什么是Docker?(6-12)

    关于什么是Docker,刚开始学的时候一脸懵X,这个东西到底是干嘛用的啊?偶然间在知乎上刷到一个比较通俗的解释: Docker就相当于一个容器,这个容器了不得了,它里面能搭好你项目需要的所有环境,并且 ...

  10. BZOJ2298:[HAOI2011]problem a——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2298 https://www.luogu.org/problemnew/show/P2519 一次 ...