作者是个*

题目描述

原题来自:USACO 2015 Feb. Silver

给出两个字符串\(S\)和\(T\),每次从前往后找到\(S\)的一个子串\(T\)并将其删除,空缺位依次向前补齐,重复上述操作多次,直到\(S\)串中不含\(T\)串。输出最终的\(S\)串。

输入格式

第一行包含一个字符串\(S\),第二行包含一个字符串\(T\)。

输出格式

输出处理后的\(S\)串。

样例

样例输入

whatthemomooofun
moo

样例输出

whatthefun

思路

一看这道题,我们会有这几种想法

1:线段树爆搞

2:\(Hash + 栈\)

3:\(KMP + 栈\)

由于本人太菜,暂时先讲 \(法2\) ,日后在更 \(法3\)。

首先,我们要想一想怎么用\(Hash\)

我们知道两个字符串的长度,显然,我们可以在计算\(S\)字符串某一位是直接用\(Hash\)判断

但是,由于当你删除之后可能重新出现一个\(T\)串,所以,我们用栈维护

我们每一次,都把当前的字符的下标扔进栈,哈希就在栈中计算,算完之后在判断。

代码大概长这样!!!

/************************************************
*Author : xzj213
*Created Time : 2020.01.17.14:21
*Mail : xzj213@qq.com
*Problem : LOJ10048
************************************************/
#include <bits/stdc++.h>
#define REP(i,a,b) for(register int i=(a);i<=(b);i++)
#define DREP(i,a,b) for(register int i=(a);i>=(b);i--)
#define mem(a,x) memset((a),(x),sizeof(a))
#define pii pair<int,int>
#define lson k<<1
#define rson k<<1|1
#define x first
#define y second
#define int long long
#define str(a) strlen(a)
using namespace std;
const int maxn=1e6+5;
const int base=211,Mod=19491001;
string s1,s2;
int Hash[maxn],p[maxn],S2,len1,len2,top,st[maxn];
/*
Hash[i] 表示栈中的第i位的Hash值
p[i] 表示base的i次方,用于计算S中某一段的Hash值
st[i] 表示栈 top 表示栈顶位置
*/
void chkmax(int &a,int b){if(a<b)a=b;}
void chkmin(int &a,int b){if(a>b)a=b;}
int read() {
int x=0,f=1;
char ch=getchar();
while(ch>57 || ch<48){if(ch==45)f=-1;ch=getchar();}
while(ch<=57 && ch>=48){x=x*10+ch-48;ch=getchar();}
return x*f;
}
signed main() {
cin>>s1>>s2;
len1=s1.size();
len2=s2.size();//输入
p[0]=1;
REP (i,1,maxn-1) p[i]=p[i-1]*base%Mod;
REP (i,0,len2-1) S2=(S2*base+s2[i])%Mod;
//计算 p[] 和 T 的Hash值
REP (i,0,len1-1) {
st[++top]=i;
Hash[top]=(Hash[top-1]*base+s1[i])%Mod;
if (top>=len2 && ((Hash[top]-Hash[top-len2]*p[len2])%Mod+Mod)%Mod==S2) top-=len2;
//判断S中是否T这个字符串
}
for (int i=1;i<=top;i++)
cout<<s1[st[i]];//输出
puts("");//换行
return 0;//~~提交就可以AC啦!!~~
}

LOJ10048. 「一本通 2.2 练习 4」Censoring的更多相关文章

  1. 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie

    题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1​​≤r​1​​<l​2​​≤r​2​​≤N,x⨁yx\bigoplus yx⨁y 表示 ...

  2. LOJ#10117. 「一本通 4.1 练习 2」简单题

    LOJ#10117. 「一本通 4.1 练习 2」简单题 题目描述 题目来源:$CQOI 2006$ 有一个$n$个元素的数组,每个元素初始均为$0$.有$m$条指令,要么让其中一段连续序列数字反转— ...

  3. LOJ#10064. 「一本通 3.1 例 1」黑暗城堡

    LOJ#10064. 「一本通 3.1 例 1」黑暗城堡 题目描述 你知道黑暗城堡有$N$个房间,$M$条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设$D_i$为如果 ...

  4. 「LOJ#10056」「一本通 2.3 练习 5」The XOR-longest Path (Trie

    #10056. 「一本通 2.3 练习 5」The XOR-longest Path 题目描述 原题来自:POJ 3764 给定一棵 nnn 个点的带权树,求树上最长的异或和路径. 输入格式 第一行一 ...

  5. 「LOJ#10042」「一本通 2.1 练习 8」收集雪花 (map

    题目描述 不同的雪花往往有不同的形状.在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们.一共有 n 个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状.在收集的过程中,同学们不希望 ...

  6. 「LOJ#10043」「一本通 2.2 例 1」剪花布条 (KMP

    题目描述 原题来自:HDU 2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 输入格式 输入数据 ...

  7. 「LOJ#10015」「一本通 1.2 练习 2」扩散(并查集

    题目描述 一个点每过一个单位时间就会向 444 个方向扩散一个距离,如图所示:两个点 a .b 连通,记作 e(a,b),当且仅当 a .b的扩散区域有公共部分.连通块的定义是块内的任意两个点 u.v ...

  8. LOJ #10131 「一本通 4.4 例 2」暗的连锁

    LOJ #10131 「一本通 4.4 例 2」暗的连锁 给一棵 \(n\) 个点的树加上 \(m\) 条非树边 , 现在需要断开一条树边和一条非树边使得图不连通 , 求方案数 . $n \le 10 ...

  9. #10042. 「一本通 2.1 练习 8」收集雪花 || 离散化 || 双指针法 || C++ || LOJ

    题目:#10042. 「一本通 2.1 练习 8」收集雪花 看到网上没有这道题的题解,所以写一下. 要标记数字是否存在,看到x<=1e9,所以考虑用离散化,然后开一个last数组,last[i] ...

随机推荐

  1. 02 安装net-tools工具

    01 登录虚拟机,没错,还是那个熟悉的黑窗口 02 输入用户名密码(我还是习惯使用root用户,因为,它可以为所欲为) 小知识:注意红色框内的符号: 一般用户为限制用户,符号为:$ 超级用户,为无限制 ...

  2. vsCode的一些个人配置

    本文主要用来记录我在使用vsCode中的一些个人习惯设置. 编辑器主题配置 主题我是用的是 escook-theme,这是我在看某视频教程时发现的一款看起来非常友好的vsCode主题. 文件图标主题 ...

  3. python-多任务编程03-迭代器(iterator)

    迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 可迭代对象(Iterable) 能够被循环遍历(迭代)的对象称为可迭代 ...

  4. 图像增强 | CLAHE 限制对比度自适应直方图均衡化

    1 基本概述 CLAHE是一个比较有意思的图像增强的方法,主要用在医学图像上面.之前的比赛中,用到了这个,但是对其算法原理不甚了解.在这里做一个复盘. CLAHE起到的作用简单来说就是增强图像的对比度 ...

  5. MacOS下Git安装及使用

    微信搜索"艺术行者",关注并回复关键词"git"获取Github安装包 上传的在线学习视频(黑马和传智双元,感谢) 微信搜索"艺术行者",关 ...

  6. 阿里云ecs轻量级服务器node镜像部署

    这个是自带安装pm2,nginx,node,mongodb的环境的,目录在控制台有给出, server端的配置按照开发手册去操作即可. 而静态的页面.需要修改nginx的配置文件,找到nginx的ng ...

  7. PHP password_get_info() 函数

    password_get_info() 函数用于返回指定散列(hash)的相关信息. PHP 版本要求: PHP 5 >= 5.5.0, PHP 7高佣联盟 www.cgewang.com 语法 ...

  8. PHP max() 函数

    实例 通过 max() 函数查找最大值: <?phpecho(max(2,4,6,8,10) . "<br>");echo(max(22,14,68,18,15) ...

  9. Skill 脚本演示 ycMPPTap.skl

    https://www.cnblogs.com/yeungchie/ ycMPPTap.skl 主要用于创建自定的 Tap 类型(指定 掺杂类型 / Via 数量 / Active 宽度),并可以通过 ...

  10. mysql中走与不走索引的情况汇集(待全量实验)

    说明 在MySQL中,并不是你建立了索引,并且你在SQL中使用到了该列,MySQL就肯定会使用到那些索引的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有索引. 索引列参与计算 ...