正题

ybtoj AC自动机-4


题目大意

有一个字符串和若干要删除的串(不存在包含关系),每次从前往后搜,搜到第一个要删除的串然后删掉,再从0开始搜

问你最后得到的字符串


解题思路

先把所有删除串丢进AC自动机中,每个串的最后位置标注一下

然后在AC自动机中跑原串,每到一位丢进栈中,如果跑到一个删除串的结尾,那么把栈中删除的部分删掉,然后从删除串的前一位继续搜


代码

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 100100
using namespace std;
int n, w, top, v[N], p[N], nx[N], to[N][30];
char s[N], ss[N], a[N];
queue<int>d;
void insert(char* s)
{int n = strlen(s+1), now = 0;for (int i = 1; i <= n; ++i){int y = s[i] - 'a';if (!to[now][y]) to[now][y] = ++w;now = to[now][y];}p[now] = n;return;
}
void bfs()
{for (int i = 0; i < 26; ++i)if (to[0][i]) d.push(to[0][i]);while(!d.empty()){int h = d.front();d.pop();for (int i = 0; i < 26; ++i)if (!to[h][i]) to[h][i] = to[nx[h]][i];else nx[to[h][i]] = to[nx[h]][i], d.push(to[h][i]);}return;
}
void solve(char* s)
{int n = strlen(s+1), now = 0;for (int i = 1; i <= n; ++i){int y = s[i] - 'a';now = to[now][y];a[++top] = s[i];//丢进栈中v[top] = now;//记录位置top -= p[now];//跑到删除串就删掉now = v[top];}return;
}
int main()
{scanf("%s", ss+1);scanf("%d", &n);for (int i = 1; i <= n; ++i){scanf("%s", s+1);insert(s);}bfs();solve(ss);for (int i = 1; i <= top; ++i)putchar(a[i]);return 0;
}

【AC自动机】屏蔽词删除(ybtoj AC自动机-4)相关推荐

  1. 【AC自动机】病毒代码(ybtoj AC自动机-5)

    正题 ybtoj AC自动机-5 题目大意 给出若干段01串,问你是否存在一个无限的01串,使得串中不存在给出的01串 解题思路 可以把给出01串用AC自动机处理,然后对每个01串的最后一位打上标记 ...

  2. 【AC自动机】前缀匹配(ybtoj AC自动机-3)

    正题 ybtoj AC自动机-3 题目大意 给你一个字符串和若干匹配串,问你匹配串的前缀和字符串的最大匹配 解题思路 先把所有匹配串丢进AC自动机,然后拿字符串去跑 每次只在当前位置存下贡献,然后按b ...

  3. 【AC自动机】单词(luogu 3966/ybtoj AC自动机-2)

    正题 luogu 3966 ybtoj AC自动机-2 题目大意 给你n个单词,让你查询这写单词分别在这n个单词中出现过多少次 解题思路 先用AC自动机建好图,然后每个点的权值为1,然后向nx传递 代 ...

  4. 【元胞自动机】基于matlab元胞自动机多车道信号交叉口仿真【含Matlab源码 818期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  5. 游戏敏感词屏蔽词过滤

    游戏和网站,都需要敏感词(屏蔽词)过滤,你懂的.而且敏感词库不断的增长,从十几年前的3000多词,已经增长到14000以上(各渠道获取的词库略有不同). 这1万多词的扫描处理,开销的性能就有点客观了. ...

  6. 【元胞自动机】基于matlab元胞自动机3D森林火灾模型【含Matlab源码 656期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  7. 【元胞自动机】基于matlab元胞自动机模拟SEIR传播模型和采取隔离措施的SEIR模型【含Matlab源码 2181期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视.1970 年, 剑桥大学的约翰 · 何顿 ...

  8. 【元胞自动机】基于matlab元胞自动机双车道交通流模型含靠右行驶【含Matlab源码 231期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  9. 下拉推广系统立择火星推荐_下拉词删除都择火星下拉

    会员注册发帖 做推广的人都离不开搜索引擎,就像鱼离不开水,很多时候我们做SEO的朋友都在研究各大搜索引擎的机制,收录,排名规则或者是黑帽技术,不管如何,只是希望把自己的企业,产品,服务在搜索上得到更多 ...

最新文章

  1. SAP PM 初级系列14 - 维修工单的凭证流
  2. 计算机考试字字处理重点,计算机等级考试一级B上机试题:字表处理题(1)
  3. python发送邮件拒绝_人生苦短之Python发邮件
  4. 解决The current branch is not configured for pull No value for key branch.master.merge found in config
  5. Spring Boot Debug调试
  6. 【CodeForces - 1042C】Array Product(思维,有坑细节)
  7. mysql主从复制实施流程_MySQL主从复制认识及实施操作
  8. mysql s授权所有用户_查看MYSQL数据库中所有用户及拥有权限
  9. java big5到gb2312的编码转换
  10. Win10 KeilC51-C251-ARM共存方法
  11. 【竖心旁】我曾在森林里遇见过一只夜莺
  12. 七夕节,我用代码制作了表白信封
  13. Flask 框架(四)— 表单处理
  14. 基于CTP的国内期货程序化交易之行情获取讲解
  15. v4l2接口解析和摄像头数据采集
  16. 知识点滴 - Git名字的由来
  17. C++中指针是什么?
  18. INSERT插入表记录
  19. html中鱼眼效果,视频鱼眼效果制作 视频鱼眼效果制作方法
  20. Java有参构造和无参构造

热门文章

  1. python创建一个空的dataframe_python 创建一个空dataframe 然后添加行数据的实例
  2. 怎么删除mysql的所有文件内容_mysql删除全部数据库
  3. PTA 7-3 地铁一日游 (30 分)
  4. java 解析 manifest_解析AndroidManifest.xml之AXMLParser.java | 学步园
  5. [JavaWeb-MySQL]多表查询练习
  6. [Java基础]JDK内置注解
  7. Pycharm安装第三方库
  8. #10003. 「一本通 1.1 例 4」加工生产调度(贪心)
  9. sklearn PCA特征降维
  10. 2019-03-14-算法-进化(移动零)