P4824 [USACO15FEB]Censoring (Silver) 审查(银)&&P3121 [USACO15FEB]审查(黄金)Censoring (Gold)
P3121 [USACO15FEB]审查(黄金)Censoring (Gold) (银的正解是KMP)
AC自动机+栈
多字符串匹配--->AC自动机
删除单词的特性--->栈
所以我们先打个AC自动机模板
然后搞2个栈维护:
- AC自动机目前跑到字典树上的哪个点
- 已经跑过且没被删除的字符(答案栈)
每次碰到有结尾标记的点,就让2个栈弹出这个点所对应的单词的长度
最后输出第二个栈就行了
attention:输出答案后要换行,否则会蜜汁爆炸7pts
P3121 code(P4824要稍作修改):
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
struct data{
int nxt[],fail/*,last*/,end;
}a[];
int n,cnt,top,stk1[],stk2[];
char g[],q[];
inline void Trie_build(){
scanf("%s",q);
int u=,len=strlen(q);
for(int i=;i<len;++i){
int p=q[i]-'a';
if(!a[u].nxt[p]) a[u].nxt[p]=++cnt;
u=a[u].nxt[p];
}a[u].end=len;
}
void AC_build(){
queue <int> h;
for(int i=;i<;++i) if(a[].nxt[i]) h.push(a[].nxt[i]);
while(!h.empty()){
int x=h.front(); h.pop();
for(int i=;i<;++i){
int &to=a[x].nxt[i];
if(to){
a[to].fail=a[a[x].fail].nxt[i];
//a[to].last= a[a[to].fail].end ? a[to].fail:a[a[to].fail].last;
h.push(to);
}else to=a[a[x].fail].nxt[i];
}
}
}
//---------以上裸AC自动机------------
void query(){
int u=,len=strlen(g);
for(int i=;i<len;++i){
u=a[u].nxt[g[i]-'a'];
stk1[++top]=u; //栈1存当前点在字典树中的位置
stk2[top]=i; //栈2存字符(答案)在主串中所在的位置
while(a[u].end) top-=a[u].end,u= top ? stk1[top]:; //删除操作
}
for(int i=;i<=top;++i) putchar(g[stk2[i]]);
putchar('\n'); //不换行就蜜汁爆炸(大雾)
}
int main(){
scanf("%s",g); scanf("%d",&n);
for(int i=;i<=n;++i) Trie_build();
AC_build();
query();
return ;
}
P4824 [USACO15FEB]Censoring (Silver) 审查(银)&&P3121 [USACO15FEB]审查(黄金)Censoring (Gold)的更多相关文章
- 「USACO15FEB」Censoring (Silver) 审查(银) 解题报告
题面 就是让你--在字符串A中,如果字符串B是A的子串,那么就删除在A中第一个出现的B,然后拼接在一起,一直重复上述步骤直到B不再是A的子串 |A|\(\le 10^6\) 思路: KMP+栈 1.由 ...
- 2021.11.09 P4824 [USACO15FEB]Censoring S与P3121 [USACO15FEB]Censoring G(KMP&&AC自动机)
2021.11.09 P4824 [USACO15FEB]Censoring S与P3121 [USACO15FEB]Censoring G(KMP&&AC自动机) https://w ...
- P3121 [USACO15FEB]审查(AC自动机)
题目: P3121 [USACO15FEB]审查(黄金)Censoring (Gold) 解析: 多字符串匹配,首先想到AC自动机 建立一个AC自动机 因为有删除和拼接这种操作,考虑用栈维护 顺着文本 ...
- Azure内容审查器之羞羞图审查
上一篇 Azure 内容审查器之文本审查我们已经介绍了如果使用Azure进行文字内容的审核.对于社区内容,上传的图片是否含有羞羞内容也是需要过虑的.但是最为一般开发者自己很难实现这种级别的智能识别.但 ...
- P4824 [USACO15FEB]Censoring (Silver) 审查(银)
传送门 一个串的匹配肯定考虑KMP 那就暴力KMP 记录一下到每个字符时匹配的位置 找到一个符合的串就标记然后暴力回跳 感觉好像太暴力了... #include<iostream> #in ...
- 洛谷P3121 审查(黄金)Censoring(Gold) [USACO15FEB] AC自动机
正解:AC自动机 解题报告: 传送门! 啊我好呆啊其实就挺模板题的,,,只是要一个栈搞一下,,,然后我就不会了,,,是看了题解才get的,,,QAQ 然后写下解法趴QwQ 首先看到多串匹配不难想到AC ...
- P3121 [USACO15FEB]审查(黄金)Censoring (Gold)
吐槽 数据太水了吧,我AC自动机的trie建错了结果只是RE了两个点,还以为数组开小了改了好久 思路 看到多模板串,字符串匹配,且模板串总长度不长,就想到AC自动机 然后用栈维护当前的字符串位置,如果 ...
- 洛谷 P3121 [USACO15FEB]审查(黄金)Censoring (Gold) 【AC自动机+栈】
这个和bzoj同名题不一样,有多个匹配串 但是思路是一样的,写个AC自动机,同样是开两个栈,一个存字符,一个存当前点在trie树上的位置,然后如果到了某个匹配串的末尾,则弹栈 #include< ...
- [USACO15FEB]Censoring (Silver)
WA了一万次.... 然后发现多输出了一个空格 我#$%^& 启示我们输出字符的时候应该输出ASCII码看一下.... 然后本题可以用烤馍片算法,每次匹配完以后看看当前最后一位的nxt数组的值 ...
随机推荐
- 计蒜客 31001 - Magical Girl Haze - [最短路][2018ICPC南京网络预赛L题]
题目链接:https://nanti.jisuanke.com/t/31001 题意: 一带权有向图,有 n 个节点编号1~n,m条有向边,现在一人从节点 1 出发,他有最多 k 次机会施展魔法使得某 ...
- Codeforces 838B - Diverging Directions - [DFS序+线段树]
题目链接:http://codeforces.com/problemset/problem/838/B You are given a directed weighted graph with n n ...
- 汉诺塔问题(The Tower of Hanoi)的递归算法与非递归算法
非递归算法: 根据圆盘的数量确定柱子的排放顺序: 若n为偶数,按顺时针方向依次摆放 A B C: 若n为奇数,按顺时针方向依次摆放 A C B. 然后进行如下操作: (1)按顺时针方向把圆盘1从现在的 ...
- Python高阶函数:map、reduece、filter
笔记中函数简介: map函数:遍历序列,对序列中每个元素进行操作,最终获取新的序列. reduce函数:对于序列内所有元素进行累计操作. filter函数:对于序列中的元素进行筛选,最终获取符合条件的 ...
- ios-Objective-C中的各种遍历(迭代)方式(转载)
iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...
- CGPoint->NSValue
http://blog.sina.com.cn/s/blog_65a8ab5d0101c0n2.html CGPoint point = CGPointMake(self.superview.nim_ ...
- Java实现批量插入
//方法执行的开始时间 long startTime = System.currentTimeMillis(); Connection conn = null; try{ //获取连接 conn = ...
- 了解Linux的进程与线程
了解Linux的进程与线程 http://timyang.net/linux/linux-process/ 上周碰到部署在真实服务器上某个应用CPU占用过高的问题,虽然经过tuning, 问题貌似已经 ...
- SparkSQL UDF两种注册方式:udf() 和 register()
调用sqlContext.udf.register() 此时注册的方法 只能在sql()中可见,对DataFrame API不可见 用法:sqlContext.udf.register("m ...
- 浙大 PAT 乙级 1001-1075 目录索引
1001. 害死人不偿命的(3n+1)猜想 1002. 写出这个数 1003. 我要通过! 1004. 成绩排名 1005. 继续(3n+1)猜想 1006. 换个格式输出整数 1007. 素数对猜想 ...