CENSORING——AC 自动机
题目
【题目描述】
FJ 为它的奶牛订阅了很多杂志,balabala.......,其中有一些奶牛不宜的东西 (比如如何煮牛排)。
FJ 将杂志中所有的文章提取出来组成一个长度最多为 $ 10^5 $ 的字符串 S。他有一个要从 S 中删除的词语的列表,$ t_1,t_2...t_n $。
FJ 每次找到最早的出现在列表里的子串,然后将其删去。他重复此过程,直到找不到这样的子串。值得注意的是删除一个单词可能产生一个新的之前并没有出现过的要被删除的单词。
FJ 保证列表中没有一个字符串是另一个字符串的子串。要就是说每次要删的单词是唯一确定的。
帮助 FJ 确定最终 S 的删减版。
【输入格式】
第一行 S,第二行 $N$,接下来 $n$ 行 $t_1,t_2,...t_n$。所有字符串只包含小写字母,所有字符串的总长不超过 $10^5$。
【输出格式】
S 的删减版。保证结果不为空
【样例输入】
begintheescapexecutionatthebreakofdawn
2
escape
execution
【样例输出】
beginthatthebreakofdawn
题解
对于 T 建 AC 自动机,然后将 $ S $ 逐位压入栈中,跑 AC 自动机,当当前节点为 $ T_i $ 的结尾时,弹出即可
代码
#include<bits/stdc++.h>
#define LL long long
#define _(d) while(d(isdigit(ch=getchar())))
using namespace std;
int R(){
int x;bool f=;char ch;_(!)if(ch=='-')f=;x=ch^;
_()x=(x<<)+(x<<)+(ch^);return f?x:-x;}
const int N=1e5+;
int n,cnt,fa[N],pre[N],top,num[N],las[N],sta[N],tr[N][],fail[N];
char str[N],ch[N];
void insert(int k){
int len=strlen(ch+),x=;
for(int i=;i<=len;i++){
if(!tr[x][ch[i]-'a'])tr[x][ch[i]-'a']=++cnt,fa[cnt]=x;
x=tr[x][ch[i]-'a'];
}
num[k]=len,pre[x]=k;
}
void build(){
queue<int>q;
for(int i=;i<;i++)
if(tr[][i])q.push(tr[][i]);
while(!q.empty()){
int x=q.front();q.pop();
for(int i=;i<;i++)
if(tr[x][i])
fail[tr[x][i]]=tr[fail[x]][i],q.push(tr[x][i]);
else tr[x][i]=tr[fail[x]][i];
}
}
int main(){
scanf("%s",str+);
int len=strlen(str+);n=R();
for(int i=;i<=n;i++)
scanf("%s",ch+),insert(i);
build();
for(int i=,x=;i<=len;i++){
sta[++top]=i;
int p=str[i]-'a',y=tr[x][p];
if(y&&pre[y])
top-=num[pre[y]],x=las[sta[top]];
else las[i]=x=y;
}
for(int i=;i<=top;i++)
putchar(str[sta[i]]);
return puts(""),;
}
CENSORING——AC 自动机的更多相关文章
- 【BZOJ3940】【BZOJ3942】[Usaco2015 Feb]Censoring AC自动机/KMP/hash+栈
[BZOJ3942][Usaco2015 Feb]Censoring Description Farmer John has purchased a subscription to Good Hoov ...
- [Usaco2015 Feb]Censoring --- AC自动机 + 栈
bzoj 3940 Censoring 题目描述 FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过10^5的字符串S. 他有一个包含n个单词的列表,列表里的n个单词记为T1......Tn. ...
- 【bzoj3940】[Usaco2015 Feb]Censoring AC自动机
题目描述 Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so they h ...
- BZOJ 3940: [Usaco2015 Feb]Censoring AC自动机_栈
Description Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so ...
- BZOJ3940:[USACO]Censoring(AC自动机,栈)
Description Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so ...
- bzoj 3940: [Usaco2015 Feb]Censoring -- AC自动机
3940: [Usaco2015 Feb]Censoring Time Limit: 10 Sec Memory Limit: 128 MB Description Farmer John has ...
- BZOJ3940: [Usaco2015 Feb]Censoring (AC自动机)
题意:在文本串上删除一些字符串 每次优先删除从左边开始第一个满足的 删除后剩下的串连在一起重复删除步骤 直到不能删 题解:建fail 用栈存当前放进了那些字符 如果可以删 fail指针跳到前面去 好菜 ...
- BZOJ 3940--[Usaco2015 Feb]Censoring(AC自动机)
3940: [Usaco2015 Feb]Censoring Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 723 Solved: 360[Subm ...
- 【BZOJ3940】[USACO2015 Feb] Censoring (AC自动机的小应用)
点此看题面 大致题意: 给你一个文本串和\(N\)个模式串,要你将每一个模式串从文本串中删去.(此题是[BZOJ3942][Usaco2015 Feb]Censoring的升级版) \(AC\)自动机 ...
随机推荐
- 【转】前端上传组件Plupload使用指南
http://www.cnblogs.com/2050/p/3913184.html Plupload有以下功能和特点: 1.拥有多种上传方式:HTML5.flash.silverlight以及传统的 ...
- 有关Backgroundworker
(一)Backgroundworker取消时应该用的有关代码: CancelAsync方法是在前台主线程用的,CancellationPending属性是在后台子线程用的.实际的使用方式应该是这样的: ...
- mui封装的ajax请求
由于项目中引进MUI框架,所以就不需要引进jquery,但需要和后台交互时,常写为jquery格式:所以笔者觉得有必要将mui封装的ajax请求在这里提一下: 1,mui框架基于htm5plus的XM ...
- 异常 android.content.res.Resources$NotFoundException: String resource ID #0x61
09-09 16:08:41.554: E/Weaver(13140):09-09 16:08:41.554: E/Weaver(13140): android.content.res.Resourc ...
- day36-hibernate检索和优化
连接查询是多表查询.
- 阿里云、宝塔、wordpress建站
1 阿里云 购买一个学生机就行啦 2 宝塔 2.1 更改阿里云的镜像 技巧01:先关掉阿里云之前的镜像 技巧02:到镜像市场中寻找宝塔的镜像资源 2.2 配置安全组 宝塔的控制面板需要开通端口 888 ...
- (转)typedef和#define的用法与区别
typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...
- PCL—关键点检测(iss&Trajkovic)低层次点云处理
博客转载自:http://www.cnblogs.com/ironstark/p/5069311.html 关键点检测往往需要和特征提取联合在一起,关键点检测的一个重要性质就是旋转不变性,也就是说,物 ...
- cf123E Maze
传送门 分析 见ptx大爷的博客 代码 #include<iostream> #include<cstdio> #include<cstring> #include ...
- Redis面试考点
什么是Redis? Redis 是一个基于内存的高性能key-value数据库. Redis的特点以及缺点? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据 ...