BZOJ 3940: [Usaco2015 Feb]Censoring AC自动机_栈
Description
Input
Output
题解:
题中一个条件特别好:
每次只会删掉第一个出现的字符串.
我们开一个栈,维护当前还存在的字符.
对所有模式串建一个 AC 自动机.
匹配模板串的字符.
如果当前匹配到单词,则弹栈,输出该单词,对应再AC自动机上的指针返回到该单词前的节点即可,并继续匹配.
Code:
#include<bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin) // ,freopen(s".out","w",stdout)
#define maxn 200000
using namespace std;
char str[maxn],arr[maxn];
int S[maxn],pos[maxn],top;
namespace AC
{
#define sigma 30
queue<int>Q;
int tot=0,root=0;
int ch[maxn][30],tag[maxn],f[maxn];
void ins(char p[],int n)
{
int x=root;
for(int i=1;i<=n;++i)
{
int c=p[i]-'a';
if(!ch[x][c]) ch[x][c]=++tot;
x=ch[x][c];
}
tag[x]=n;
}
void getfail()
{
for(int i=0;i<sigma;++i) if(ch[root][i]) Q.push(ch[root][i]);
while(!Q.empty())
{
int u=Q.front();Q.pop();
for(int i=0;i<sigma;++i)
{
int q=ch[u][i];
if(!q) { ch[u][i]=ch[f[u]][i]; continue; }
Q.push(q);
f[q]=ch[f[u]][i];
}
}
}
};
int main()
{
// setIO("input");
int len,m;
scanf("%s",str+1),len=strlen(str+1);
scanf("%d",&m);
for(int i=1,a;i<=m;++i)
{
scanf("%s",arr+1), a=strlen(arr+1), AC::ins(arr,a);
}
AC::getfail();
int tr=0;
for(int i=1;i<=len;++i)
{
int c=str[i]-'a';
tr=AC::ch[tr][c];
pos[i]=tr;
S[++top]=i;
if(AC::tag[tr]) top -= AC::tag[tr], tr = pos[S[top]];
}
for(int i=1;i<=top;++i) printf("%c",str[S[i]]);
printf("\n");
return 0;
}
BZOJ 3940: [Usaco2015 Feb]Censoring AC自动机_栈的更多相关文章
- bzoj 3940: [Usaco2015 Feb]Censoring -- AC自动机
3940: [Usaco2015 Feb]Censoring Time Limit: 10 Sec Memory Limit: 128 MB Description Farmer John has ...
- BZOJ 3940: [Usaco2015 Feb]Censoring
3940: [Usaco2015 Feb]Censoring Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 367 Solved: 173[Subm ...
- 【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 ...
- BZOJ3940: [Usaco2015 Feb]Censoring (AC自动机)
题意:在文本串上删除一些字符串 每次优先删除从左边开始第一个满足的 删除后剩下的串连在一起重复删除步骤 直到不能删 题解:建fail 用栈存当前放进了那些字符 如果可以删 fail指针跳到前面去 好菜 ...
- Bzoj 3942: [Usaco2015 Feb]Censoring(kmp)
3942: [Usaco2015 Feb]Censoring Description Farmer John has purchased a subscription to Good Hooveske ...
- [BZOJ 3942] [Usaco2015 Feb] Censoring 【KMP】
题目链接:BZOJ - 3942 题目分析 我们发现,删掉一段 T 之后,被删除的部分前面的一段可能和后面的一段连接起来出现新的 T . 所以我们删掉一段 T 之后应该接着被删除的位置之前的继续向后匹 ...
- BZOJ 3942: [Usaco2015 Feb]Censoring
Description 有两个字符串,每次用一个中取出下一位,放在一个字符串中,如果当前字符串的后缀是另一个字符串就删除. Sol KMP+栈. 用一个栈来维护新加的字符串就可以了.. 一开始我非常的 ...
随机推荐
- HRBUST 1214 方格取数
方格取数 Time Limit: 1000ms Memory Limit: 65535KB This problem will be judged on HRBUST. Original ID: 12 ...
- 如何让 Windows 上的命令行工具更好用
侯爵老师视频详解:如何让 Windows 上的命令行工具更好用 很多 Windows 用户在打开这个小黑窗时,都会情不自禁的感慨,「实在是太丑了--」 实际上如果你用的是 Windows 8 或 Wi ...
- 2017年JavaScript框架---Top5
前言 个人观点,供您参考 观点源自作者的使用经验和日常研究 排名基于框架的受欢迎度, 语法结构, 易用性等特性 希望大家能够基于此视频找到最适合自己的框架 下面介绍的都是严格的前端框架和库 前言 To ...
- 【ACM】hdu_zs1_1003_放大的X _201307271557
放大的X Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submissio ...
- codevs——T1219 骑士游历
http://codevs.cn/problem/1219/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Desc ...
- iOS_25_彩票设置的cell的数据源模型的封装
组模型的封装 SettingGroup // // SettingGroup.h // 25_彩票 // // Created by beyond on 14-8-28. // Copyright ( ...
- iOS- "unacceptable content-type: text/plain"等content-type bug解决方式
常常在使用AFN的时候会出现content-type错误,缺少请求类型,比方"unacceptable content-type: text/plain" 解决方法: 1.在网络请 ...
- 学习 java netty (一) -- java nio
前言:近期在研究java netty这个网络框架,第一篇先介绍java的nio. java nio在jdk1.4引入,事实上也算比較早的了.主要引入非堵塞io和io多路复用.内部基于reactor模式 ...
- Android+Jquery Mobile学习系列(1)-开发环境
开发环境是老生常谈的问题了,网上有很多关于Android环境安装的文章,我这里也就简单说明一下,不做过多分析. 想了解详细的安装说明,可以参见[百度经验] Java环境安装直接跳过,说一下Androi ...
- poj 1018(枚举+贪心)
通讯系统 We have received an o ...