#10048 「一本通 2.2 练习 4」Censoring(内附封面)

[USACO15FEB] Censoring S

题面翻译

Farmer John为他的奶牛们订阅了Good Hooveskeeping杂志,因此他们在谷仓等待挤奶期间,可以有足够的文章可供阅读。不幸的是,最新一期的文章包含一篇关于如何烹制完美牛排的不恰当的文章,FJ不愿让他的奶牛们看到这些内容。

FJ已经根据杂志的所有文字,创建了一个字符串 S S S ( S S S 的长度保证不超过 1 0 6 10^6 106 ),他想删除其中的子串 T T T ,他将删去 S S S 中第一次出现的子串 T T T ,然后不断重复这一过程,直到 S S S 中不存在子串 T T T

注意:每次删除一个子串后,可能会出现一个新的子串 T T T (说白了就是删除之后,两端的字符串有可能会拼接出来一个新的子串 T T T )。

输入格式:第一行是字符串 S S S ,第二行输入字符串 T T T ,保证 S S S 的长度大于等于 T T T 的长度, S S S T T T 都只由小写字母组成。

输出格式:输出经过处理后的字符串,保证处理后的字符串不会为空串。

Translated by @StudyingFather

题目描述

Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so they have plenty of material to read while waiting around in the barn during milking sessions. Unfortunately, the latest issue contains a rather inappropriate article on how to cook the perfect steak, which FJ would rather his cows not see (clearly, the magazine is in need of better editorial oversight).

FJ has taken all of the text from the magazine to create the string S S S of length at most 10^6 characters. From this, he would like to remove occurrences of a substring T T T to censor the inappropriate content. To do this, Farmer John finds the first occurrence of T T T in S S S and deletes it. He then repeats the process again, deleting the first occurrence of T T T again, continuing until there are no more occurrences of T T T in S S S. Note that the deletion of one occurrence might create a new occurrence of T T T that didn’t exist before.

Please help FJ determine the final contents of S S S after censoring is complete.

输入格式

The first line will contain S S S. The second line will contain T T T. The length of T T T will be at most that of S S S, and all characters of S S S and T T T will be lower-case alphabet characters (in the range a…z).

输出格式

The string S S S after all deletions are complete. It is guaranteed that S S S will not become empty during the deletion process.

样例 #1

样例输入 #1

whatthemomooofun
moo

样例输出 #1

whatthefun

题目人话翻译:

删除A串中所有的B子串,包括删除后拼接成的新A串中的B串

大致思路

本质上还是一个字串匹配问题,所以KMP。

void pre(){int j=0;p[1]=0;for(int i=1;i<nb;i++){while(j>0&&b[i+1]!=b[j+1])j=p[j];//B串匹配模板if(b[i+1]==b[j+1])j++;p[i+1]=j;}
}

而每次的删除操作很容易就可以想到栈,而STL的栈无法较高效地实现判断新拼接成的A串,因此我们需要简单写一个手写栈。
而KMP判断过程中的主串也就变为了栈的数组,用top标记栈头,每次KMP匹配的位置也就变成了
s t a c k [ t o p ] stack[top] stack[top]
而每次找到一个B串时,top也就需要跟着减少,此时j需要更新新的值,而从头开始重新匹配肯定是不现实的,那么我们可以再用一个数组存储A与B串匹配时j的值,调用也很简单,每次j的值更新为top所在位置的j值即可

代码实现

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+99;
char a[N],b[N],astack[N];
long long int na,nb,p[N],p2[N],top=0;
void pre(){int j=0;p[1]=0;for(int i=1;i<nb;i++){while(j>0&&b[i+1]!=b[j+1])j=p[j];if(b[i+1]==b[j+1])j++;p[i+1]=j;}
}
void kmp(){int j=0;for(int i=0;i<na;i++){astack[top+1]=a[i+1];top++;while(j>0&&astack[top]!=b[j+1])j=p[j];if(astack[top]==b[j+1])j++;p2[top]=j;if(j==nb){for(int k=1;k<=nb;k++){astack[top]='F';top--;}j=p2[top];}
int main(){scanf("%s%s",a+1,b+1);na=strlen(a+1);nb=strlen(b+1);pre();kmp();for(int i=1;i<=top+1;i++){if(astack[i]!='F')cout<<astack[i];}return 0;
}

附封面

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4952.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习6:使用 TensorFlow 的训练线性回归模型

纸上得来终觉浅&#xff0c;绝知此事要躬行。前面 5 篇文章介绍了机器学习相关的部分基础知识&#xff0c;在本章&#xff0c;笔者将讲解基于 TensorFlow 实现一个简单的线性回归模型&#xff0c;以便增强读者对机器学习的体感。 目录 1.环境准备 1.1 安装 Python3 1.2 安装…

尚硅谷微信小程序开发 仿网易云音乐App 小程序 后端接口服务器搭建

小程序学习 尚硅谷微信小程序开发 项目网易云小程序学习地址&#xff1a; 01-尚硅谷-小程序-课程介绍_哔哩哔哩_bilibili 视频相关的教程文档与笔记分享 链接&#xff1a;https://pan.baidu.com/s/1aq7ks8B3fJ1Wahge17YYUw?pwd7oqm 提取码&#xff1a;7oqm 配套服务器 老师…

品牌方的brief怎么写,注意事项

我们都知道&#xff0c;对于产品传播来说&#xff0c;达人起着重要的作用。可又是什么影响着达人的传播结果呢?今天给大家分享下&#xff0c;品牌方的brief怎么写的注意事项。 一、什么是brief 可能有的朋友&#xff0c;还不太清楚&#xff0c;到底什么是brief。Brief&#xf…

用python实现调用百度图片搜索的API

前言&#xff1a;这段代码是一个简单的图片爬虫程序它可以通过输入关键词&#xff0c;在百度图片中搜索相关图片&#xff0c;并返回一张随机的图片。代码使用Flask框架搭建了一个简单的Web应用&#xff0c;将用户输入的关键词作为参数传递给爬虫程序&#xff0c;然后从百度图片…

linux 资源包安装详细教程

linux 资源包安装详细教程 一、离线下载安装1.1 下载1.2 安装1.3 错误&#xff1a;依赖检测失败 - 解决方案1.4 查看安装的包情况 二、在线安装 一、离线下载安装 1.1 下载 点击进入网页&#xff1a;linux资源包下载链接&#xff1a;pkgs.org在搜索栏输入需要的包&#xff0c…

7.3 SpringBoot整合MyBatis分页插件github.pageHelper:实现图书列表API

文章目录 前言一、自己实现分页第一步&#xff0c;count 查询 总记录数&#xff08;totalCount&#xff09;&#xff0c;计算总页数&#xff08;totalPages&#xff09;第二步&#xff0c;limit 查询 指定页数据 二、不考虑分页的查询图书列表MapperBookServiceImplBookListPar…

CSS_高度自动过渡 auto height

方法一 grid 布局中的 fr 单位&#xff08;推荐使用&#xff09; <div class"wrap"><button class"trigger">鼠标放上来试试</button><div class"grid"><div><p>高度自动过渡</p></div></d…

Linux服务器同步Windows目录同步-rsync

前言 最近需要&#xff0c;Linux的服务器同步Windows的一个目录。查了下&#xff0c;大概有三种方法&#xff1a;网盘同步&#xff1b;rsync同步&#xff1b;挂载目录。 网盘同步&#xff0c;可以选择搭建一个Nextcloud 。但是问题在于&#xff0c;我需要的是&#xff0c;客户…

LangChain-Agent自定义Tools类 ——输入参数篇(二)

给自定义函数传入输入参数&#xff0c;分别有single-input 参数函数案例和multi-input 参数函数案例&#xff1a; from langchain.agents import Tool from langchain.tools import BaseTool from math import pi from typing import Union from math import pi from typing …

金蝶云星空财务软件被locked勒索病毒攻击后如何更快解密数据库数据?

金蝶云星空财务软件是一款广泛应用于企业财务管理领域的软件&#xff0c;然而&#xff0c;近期很多企业的金蝶云星空财务软件遭受到了locked勒索病毒的攻击&#xff0c;导致数据库数据被加密。而这次的locked勒索病毒采用了新的加密形式&#xff0c;它不仅能够扫描出各种软件系…

LLM 应用参考架构:ArchGuard Co-mate 实践示例

随着&#xff0c;对于 LLM 应用于架构领域探索的进一步深入&#xff0c;以及 ArchGuard Co-mate 开发进入深入区&#xff0c;我们发现越来越多的通用模式。 在先前的文章里&#xff0c;我们总结了一系列的设计原则&#xff0c;在这篇文章里&#xff0c;我们将介绍 ArchGuard Co…

数字信号的载波传输

从信号传输质量来看&#xff0c;数字系统优于模拟系统。 由于数字基带信号的频谱包含低频成分&#xff0c;而许多重要的通信信道是带通型的&#xff0c;比如无线信道和许多有线信道&#xff0c;这时需要调制成数字频带信号。 数字调制与模拟调制原理基本相似&#xff0c;有调幅…