【AC自动机】Censoring
【题目链接】
【题意】
有一个长度不超过 1e5 的字符串 。Farmer John 希望在 T 中删掉 n 个屏蔽词(一个屏蔽词可能出现多次),这些词记为 P1,P2……Pn。
【题解】
利用栈来进行匹配删除即可。
1、建模式串的AC自动机。(结尾位置记录长度)
2、利用文本串跑一遍AC自动机。
3、在跑的过程中,如果遇到屏蔽字的结尾时,相应操作为:1、把栈里弹出模式串的长度,2、同时文本串继续跑。
4、跑的过程中还需要一个辅助的数组记录当前是 匹配到文本串的在AC自动机上的下标。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1e5+;
char S[N],T[N];
int Trie[N][],fail[N],End[N];
int n,Ans[N],Back_up[N],top,idx=;
int Q[N],Head,Tail;
void Insert( char s[] , int Id ){
int len = , p = ; for(int i=;s[i];i++,len++){
int t = s[i] - 'a' ;
if( !Trie[p][t] )
Trie[p][t] = ++idx ;
p = Trie[p][t] ;
}
End[p] = len ;
}
void Build(){
Head = , Tail = ;
for(int i=;i<;i++) Trie[][i] = ; Q[ ++Tail ] = ; while( Head <= Tail ){
int u = Q[Head++] ;
for(int i=;i<;i++){
int To = Trie[u][i];
if(To){
fail[To] = Trie[fail[u]][i];
Q[++Tail] = To ;
}else{
Trie[u][i] = Trie[fail[u]][i];
}
}
}
} int main()
{
scanf("%s",T);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%s",S);
Insert( S , i );
}
Build(); for(int i=,p=;T[i];i++){
Back_up[i] = p = Trie[p][T[i]-'a'];
Ans[++top] = i; if( End[p] ){
top = top - End[p];
p = Back_up[Ans[top]];
}
}
for(int i=;i<=top;i++){
putchar(T[Ans[i]]);
}
putchar('\n');
return ;
}
Censoring
【AC自动机】Censoring的更多相关文章
- 【BZOJ3940】【BZOJ3942】[Usaco2015 Feb]Censoring AC自动机/KMP/hash+栈
[BZOJ3942][Usaco2015 Feb]Censoring Description Farmer John has purchased a subscription to Good Hoov ...
- BZOJ 3940--[Usaco2015 Feb]Censoring(AC自动机)
3940: [Usaco2015 Feb]Censoring Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 723 Solved: 360[Subm ...
- [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 ...
- 【BZOJ3940】[USACO2015 Feb] Censoring (AC自动机的小应用)
点此看题面 大致题意: 给你一个文本串和\(N\)个模式串,要你将每一个模式串从文本串中删去.(此题是[BZOJ3942][Usaco2015 Feb]Censoring的升级版) \(AC\)自动机 ...
- BZOJ-3940:Censoring(AC自动机裸题)
Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so they have p ...
- [BZOJ3940]:[Usaco2015 Feb]Censoring(AC自动机)
题目传送门 题目描述: FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过105的字符串S.他有一个包含n个单词的列表,列表里的n个单词记为t1…tN.他希望从S中删除这些单词.FJ每次在S中 ...
- bzoj3940 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 ...
随机推荐
- MySQL inodb cluster部署
innodb cluster是基于组复制来实现的. 搭建一套MySQL的高可用集群innodb. 实验环境: IP 主机名 系统 软件 192.168.91.46 master RHEL7.4 mys ...
- ICEM-五通孔管
原视频下载地址:https://yunpan.cn/cqaQ2t5DrRcKa 访问密码 d111
- 缓存-redis+memCache
缓存-redis+memCache:为方便预览,将思维导图上传至印象笔记,博客园直接上传图片受限于图片大小. https://app.yinxiang.com/shard/s24/nl/2726253 ...
- CLR 虚方法调用和接口方法调用
不知接口方法和虚方法分发有什么区别?似乎在CIL中都是callvirt指令. 对,MSIL里都是callvirt,但JIT的时候得到了不同的处理:对虚方法的分发是编译成这样: mov ecx, es ...
- arcgis python 删除一个数据库所有数据
# -*- coding: cp936 -*- import xlrd # must init xlrd import arcpy import os def main(): arcpy.env.wo ...
- apt如何列出所有已经安装的软件包
apt如何列出所有已经安装的软件包 转 https://www.helplib.com/ubuntu/article_155294 问题: 我想将所有已安装软件包的列表输出到文本文件中,以便我可以查看 ...
- Spark2.0协同过滤与ALS算法介绍
ALS矩阵分解 一个 的打分矩阵 A 可以用两个小矩阵和的乘积来近似,描述一个人的喜好经常是在一个抽象的低维空间上进行的,并不需要把其喜欢的事物一一列出.再抽象一些,把人们的喜好和电影的特征都投到这个 ...
- Qt编写数据可视化大屏界面电子看板10-改造QCustomPlot
一.前言 为了抛弃对QChart的依赖,以及echart的依赖,(当然,后期也会做qchart的版本和echart的版本,尤其是echart的版本是肯定会做的,毕竟echart的效果牛逼的一塌糊涂,全 ...
- sersync+rsync做实时同步
(1).实验环境 源主机:youxi1 192.168.5.101 目的主机:youxi2 192.168.5.102 目的:实时同步数据 sersync默认端口874,rsync默认端口873 (2 ...
- C-Lodop提示Access violation at address ...in module 'CLodopPrint32.exe' write of address
C-Lodop提示 Access violation at address ……in module 'CLodopPrint32.exe' write of address ……最近遇到了个问题,上午 ...