【bzoj3940】[Usaco2015 Feb]Censoring AC自动机
题目描述
输入
输出
样例输入
begintheescapexecutionatthebreakofdawn
2
escape
execution
样例输出
beginthatthebreakofdawn
题解
AC自动机
基本思路就是记录每匹配一个字符后指针在Trie中的位置,如果碰到单词就退回到这个单词之前的位置。
可以使用一个栈来搞定。
这里还顺便记录了当前的答案串。
然而一开始写的标准AC自动机,T了,于是改Trie图(AC自动机优化?有限状态自动机?),然后飞速跑过,这个优化不是一般的重要。
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int next[100010][26] , cnt[100010] , tot = 1 , fail[100010] , sta[100010] , tt;
char str[100010] , p[100010] , ans[100010];
queue<int> q;
void build()
{
int x , i , t;
q.push(1);
for(i = 0 ; i < 26 ; i ++ ) next[0][i] = 1;
while(!q.empty())
{
x = q.front() , q.pop();
for(i = 0 ; i < 26 ; i ++ )
{
if(next[x][i])
{
t = fail[x];
while(t && !next[t][i]) t = fail[t];
fail[next[x][i]] = next[t][i];
q.push(next[x][i]);
}
else next[x][i] = next[fail[x]][i];
}
}
}
int main()
{
int n , i , l , lt , now;
scanf("%s%d" , str , &n);
l = strlen(str);
while(n -- )
{
scanf("%s" , p);
lt = strlen(p);
now = 1;
for(i = 0 ; i < lt ; i ++ )
{
if(!next[now][p[i] - 'a']) next[now][p[i] - 'a'] = ++tot;
now = next[now][p[i] - 'a'];
}
cnt[now] = lt;
}
build();
sta[0] = 1 , now = 1;
for(i = 0 ; i < l ; i ++ )
{
now = next[now][str[i] - 'a'];
sta[++tt] = now , ans[tt] = str[i];
if(cnt[now]) tt -= cnt[now] , now = sta[tt];
}
for(i = 1 ; i <= tt ; i ++ ) printf("%c" , ans[i]);
printf("\n");
return 0;
}
【bzoj3940】[Usaco2015 Feb]Censoring AC自动机的更多相关文章
- BZOJ3940: [Usaco2015 Feb]Censoring (AC自动机)
题意:在文本串上删除一些字符串 每次优先删除从左边开始第一个满足的 删除后剩下的串连在一起重复删除步骤 直到不能删 题解:建fail 用栈存当前放进了那些字符 如果可以删 fail指针跳到前面去 好菜 ...
- 【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 MB Description Farmer John has ...
- [Usaco2015 Feb]Censoring --- AC自动机 + 栈
bzoj 3940 Censoring 题目描述 FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过10^5的字符串S. 他有一个包含n个单词的列表,列表里的n个单词记为T1......Tn. ...
- BZOJ 3940: [Usaco2015 Feb]Censoring AC自动机_栈
Description Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so ...
- [BZOJ3940]:[Usaco2015 Feb]Censoring(AC自动机)
题目传送门 题目描述: FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过105的字符串S.他有一个包含n个单词的列表,列表里的n个单词记为t1…tN.他希望从S中删除这些单词.FJ每次在S中 ...
- bzoj3940: [Usaco2015 Feb]Censoring
AC自动机.为什么洛谷水题赛会出现这种题然而并不会那么题意就不说啦 .终于会写AC自动机判断是否是子串啦...用到kmp的就可以用AC自动机水过去啦 #include<cstdio> #i ...
- 【BZOJ3940】[USACO2015 Feb] Censoring (AC自动机的小应用)
点此看题面 大致题意: 给你一个文本串和\(N\)个模式串,要你将每一个模式串从文本串中删去.(此题是[BZOJ3942][Usaco2015 Feb]Censoring的升级版) \(AC\)自动机 ...
- BZOJ 3940: [Usaco2015 Feb]Censoring
3940: [Usaco2015 Feb]Censoring Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 367 Solved: 173[Subm ...
随机推荐
- 爬虫——urllib.request库的基本使用
所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地.在Python中有很多库可以用来抓取网页,我们先学习urllib.request.(在python2.x中为urllib2 ...
- Python的scrapy之爬取51job网站的职位
今天老师讲解了Python中的爬虫框架--scrapy,然后带领我们做了一个小爬虫--爬取51job网的职位信息,并且保存到数据库中 用的是Python3.6 pycharm编辑器 爬虫主体: im ...
- 静态栈抽象数据类型stack实现
#include<stdio.h> #include<stdbool.h> #include<stdlib.h> #define MAX_STACK_SIZE 10 ...
- 当安装mongodb客户端出现了Failed to load list of databases
在装mongodb最新版(4.1.5开发版)服务后,我用robo3t打开它的时候遇到了这个问题. 最直接的解决办法就是换一个mongodb版本,https://github.com/Studio3T/ ...
- Python自动化运维——DNS处理模块
Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:dnspython 功能: 支持所有的记录类型 可以用于查询.传输并动态更新ZONE信息 支持TSIG(事务 ...
- Python3 logging模块&ConfigParser模块
''' 博客园 Infi_chu ''' ''' logging模块 该模块是关于日志相关操作的模块 ''' import logging # logging.debug('debug') # log ...
- UVA ~ 514 ~ Rails (栈)
参考:https://blog.csdn.net/ZscDst/article/details/80266639 #include <iostream> #include <cstd ...
- HDU暑假多校第三场H.Monster Hunter
一.题意 给定一个树状地图,每个树节点上有一只怪物,打死一只怪物的过程中将会消耗A点HP,打死之后将会获得B点HP.因为树状结构,所以每只怪物必须先打死父节点的怪兽之后在打死子节点的怪物.现在,给定每 ...
- 利尔达CC3200模块烧写程序笔记
1. 硬件使用利尔达的CC3200模块,仿真下载器使用利尔达的FTDI仿真器,硬件完全兼容官方的仿真器.仿真器支持IAR的调试,单步运行等操作. 2. 硬件连接接线说明: RXD, TXD, GNG, ...
- Linux下Expect 完成自动输入密码
今天要开发一个定时任务,然后加入cron列表中.但是有个问题摆在眼前,脚本的执行中需要输入数据库密码(貌似5.1版本以上不允许在-p后直接加密码,会报错) mysql -u root -p <& ...