方法就是维护一个动态栈 记录栈的每一位匹配到串的哪一位的编号 第一道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. Ubuntu 配置 ftp freemind adb

    . 1. 配置apt-get源 配置过程 : sudo vim /etc/profile 命令, 在后面添加下面的内容; 刷新配置文件 : source /etc/profie 命令; 刷新源 : s ...

  2. Alpha-2

    前言 失心疯病源2 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 今天完成了那些任务 17:30~21:30 又测试了一些算法和代码,时间不能再拖下去了,要尽快进入代码阶段,决 ...

  3. ACM 第十八天

    数学基础(卷积,FFT,FWT,FMT,鸽巢原理,群论,哈里亚余数,哈里亚计数定理,组合数学,LVG定理,期望DP,期望点贡献问题) 练习题: A - Necklace of Beads Beads ...

  4. LintCode-378.将二叉查找树转换成双链表

    将二叉查找树转换成双链表 将一个二叉查找树按照中序遍历转换成双向链表. 样例 给定一个二叉查找树: 返回 1<->2<->3<->4<->5. 标签 链 ...

  5. Linux内核策略介绍学习笔记

    主要内容 硬件 策略 CPU 进程调度.系统调用.中断 内存 内存管理 外存 文件IO 网络 协议栈 其他 时间管理 进程调度 内核的运行时间 系统启动.中断发生.系统调用以及内核线程. 进程和线程的 ...

  6. PokeCats开发者日志(九)

      现在是PokeCats游戏开发的第十五天的中午,总算过了规范性检查这一关. 但愿能过吧.

  7. 20个实用的Linux命令

    20个实用的Linux命令 2016-04-16 程序员之家 1. 命令:sl (蒸汽机车) 你可能了解 ‘ls’ 命令,并经常使用它来查看文件夹的内容.但是,有些时候你可能会拼写成 ‘sl’ ,这时 ...

  8. 【Linux】- vi/vim

    所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...

  9. wpf 验证方法

    效果图,当放鼠标到文本框上会显示出错的提示.

  10. C++基础知识(二)

    八. 继承:让某个类的对象获得另一个类的对象的特性.通过继承可实现代码重用,即从已存在的类派生出的一个新类将自动具有原来那个类的特性. 类的继承还具有:(1)单向性:A类为B类的基类(父类),则派生类 ...