BZOJ3940: [Usaco2015 Feb]Censoring (AC自动机)
题意:在文本串上删除一些字符串 每次优先删除从左边开始第一个满足的
删除后剩下的串连在一起重复删除步骤 直到不能删
题解:建fail 用栈存当前放进了那些字符 如果可以删 fail指针跳到前面去
好菜啊TAT 原来还有个优化
#include <bits/stdc++.h>
using namespace std; char t[];
char s[];
int n, cnt, tot;
int ch[][];
int val[];
int que[];
int fail[];
char ans[];
int id[]; void insert() {
int len = strlen(s); int now = ;
for(int i = ; i < len; i++) {
int c = s[i] - 'a';
if(!ch[now][c]) ch[now][c] = ++cnt;
now = ch[now][c];
}
val[now] = len;
} void getfail() {
int l1 = , r1 = ;
que[++r1] = ; while(l1 <= r1) {
int now = que[l1];
l1++; for(int i = ; i < ; i++) {
if(ch[now][i]) {
int y = fail[now];
while(!ch[y][i]) y = fail[y];
fail[ch[now][i]] = ch[y][i];
que[++r1] = ch[now][i];
}
else ch[now][i] = ch[fail[now]][i];
}
}
} void init() {
cnt = ;
tot = ;
id[] = ;
for(int i = ; i < ; i++) ch[][i] = ;
} int main() {
init();
scanf("%s", t + );
int len = strlen(t + ); scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%s", s);
insert();
}
getfail(); int now = ;
for(int i = ; i <= len; i++) {
int c = t[i] - 'a'; now = ch[now][c];
id[++tot] = now;
ans[tot] = t[i]; if(val[now]) {
tot -= val[now];
now = id[tot];
}
}
for(int i = ; i <= tot; i++) printf("%c", ans[i]);
puts("");
return ;
}
BZOJ3940: [Usaco2015 Feb]Censoring (AC自动机)的更多相关文章
- 【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 ...
- 【bzoj3940】[Usaco2015 Feb]Censoring AC自动机
题目描述 Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so they h ...
- [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 ...
随机推荐
- DB Link 去除域名
1.查看global_name的设置 SQL> show parameters global_name; NAME TYPE ...
- Tomcat黑窗口改变Title
start cmd /K " && call startup.bat && pause && exit " 设置Title之后,再手 ...
- hadoop中的序列化
此文已由作者肖凡授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近在学习hadoop,发现hadoop的序列化过程和jdk的序列化有很大的区别,下面就来说说这两者的区别都有 ...
- Go语言中的代码重用 - 继承还是组合?
故事要从我在一个项目中,想要假装的专业一点而遇到的一个陷阱说起. 代码重用 在这个项目中,我们已经有了类似如下的代码: package main import ( "fmt" ) ...
- 关于git本地已有项目
终于要开始彻底掌握git了,第一步自然是自己建个test repository.然而,目前只学到git init, git clone啊.都没说怎么上传本地已有仓库,网上一搜吧,全是坑人的,标题还写的 ...
- python 类装饰器
class Test(): def __init__(self, func): print('装饰器1') self.__func = func def __call__(self): print(' ...
- bzoj 1477: 青蛙的约会【exgcd】
列出式子是\( mx+s1\equiv nx+s2(mod L) (m-n)x+Ly=s2-s1 \),注意如果n-m<0的话,就把ac都乘-1变成正数,然后exgcd求解,最后注意x为负的话要 ...
- 洛谷P3209 [HNOI2010]平面图判定(2-SAT)
传送门 看到哈密顿回路就被吓傻了……结果没有好好考虑性质…… 首先,平面图有个性质:边数小于等于$3n-6$(我也不知道为啥),边数大于这个的直接pass 然后考虑原图,先把哈密顿回路单独摘出来,就是 ...
- hdu1875 畅通工程再续 暴力+基础最小生成树
#include<cstdio> #include<cmath> #include<algorithm> using namespace std; ; ; ; in ...
- 480 Sliding Window Median 滑动窗口中位数
详见:https://leetcode.com/problems/sliding-window-median/description/ C++: class Solution { public: ve ...