【BZOJ3942】Censoring [KMP]
Censoring
Time Limit: 10 Sec Memory Limit: 128 MB
[Submit][Status][Discuss]
Description
有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程。
Input
第一行是S串,第二行是T串。
Output
输出一行,表示按照操作后得到的串。
Sample Input
moo
Sample Output
HINT
Main idea
按照S串的顺序加入S串中的字符,一旦出现了一段和T串一样,则删去这一段,求最后得到的串。
Solution
运用KMP,我们显然只要先把T串加入到Stack里面,然后再按照S的顺序加入字符,每次求next(next[i]表示s[1…i]中最长的公共前后缀),显然next==T串长度的话删去相应长度即可。
Code
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstdio> 5 #include<cstring> 6 #include<cstdlib> 7 #include<cmath> 8 #include<bitset> 9 using namespace std; 10 11 const int ONE=2000001; 12 13 int n,m; 14 char a[ONE],b[ONE],Stack[ONE]; 15 int next[ONE],j,top; 16 17 int get() 18 { 19 int res=1,Q=1;char c; 20 while( (c=getchar())<48 || c>57 ) 21 if(c=='-')Q=-1; 22 res=c-48; 23 while( (c=getchar())>=48 && c<=57 ) 24 res=res*10+c-48; 25 return res*Q; 26 } 27 28 void Deal(int n,char a[],int PD) 29 { 30 for(int i=PD;i<=n;i++) 31 { 32 Stack[++top] = a[i]; 33 j=next[top-1]; 34 while(j && Stack[j+1] != Stack[top]) j=next[j]; 35 if(Stack[j+1] == Stack[top]) j++; 36 next[top] = j; 37 if(PD==1 && next[top]==m) top-=m; 38 } 39 } 40 41 int main() 42 { 43 scanf("%s",a+1); n=strlen(a+1); 44 scanf("%s",b+1); m=strlen(b+1); 45 Stack[++top]=b[1]; 46 Deal(m,b,2); Deal(n,a,1); 47 48 for(int i=m+1;i<=top;i++) 49 printf("%c",Stack[i]); 50 51 }
View Code
转载于:https://www.cnblogs.com/BearChild/p/6479502.html
【BZOJ3942】Censoring [KMP]相关推荐
- 算法学习笔记【1】:KMP 算法
实际上这个算法很早就学了,但是那个时候并没有了解的很清晰. 搞得好像现在有似的 首先,KMP 是三个人的名字... 首先,KMP 算法是用于字符串匹配的,时间复杂度为 O(n+m)O(n+m)O(n+ ...
- 【XSY2472】string KMP 期望DP
题目大意 给定一个由且仅由字符'H','T'构成的字符串\(S\). 给定一个最初为空的字符串\(T\) ,每次随机地在\(T\)的末尾添加'H'或者'T'. 问当\(S\)为\(T\)的后缀时, ...
- 【LeetCode】图解KMP算法
文章目录 前言 1.简介 2.图解KMP思想 2.1.串的匹配 2.2.寻找相同前后缀 3.真枪实战 3.1.题目描述 3.2.示例 3.3.提示 3.4.思路 3.5.具体实现 3.6.测试结果 前 ...
- 【模式匹配】之 —— KMP算法详解及证明
一 RevisionsHistory 1 一 Revisions History 二 前言 三 关于算法学习 四 KMP算法始末 KMP算法是用来 ...
- 【模板】Trie KMP ACAM模板
Trie KMP ACAM模板 虽然实际情况这个都得改 Trie 01Trie也差不多. const int MAXN = 1e6 + 10, SIZE = 26; struct Trie{int c ...
- 【NOI2014】动物园 kmp性质
对于字符串\(S\)的前\(i\)个字符构成的子串,既是它的后缀又是它的前缀的字符串中,它本身除外,最长的长度记作 \(next[i]\) 真是精炼的定义 char s[maxn];int n; in ...
- 【BZOJ3940】[USACO2015 Feb] Censoring (AC自动机的小应用)
点此看题面 大致题意: 给你一个文本串和NNN个模式串,要你将每一个模式串从文本串中删去.(此题是[bzoj3942][Usaco2015 Feb]Censoring的升级版) ACACAC自动机 这 ...
- 暑假N天乐【比赛篇】 —— 2019杭电暑期多校训练营(第五场)
开启疯狂水题解模式,大概会持续好几次...直到我赶上进度为止. 以下题解包括: \[1001[HDU-6624] \\ 1004[HDU-6627] \\ 1005[HDU-6628] \\ 1006 ...
- 【MCU】一种单片机节省内存的方法(补充)
1.聊一聊 以前听这首曲子内心会变得格外平静,然而现在却五味陈杂! 今天主要跟大家分享一个MCU省内存的办法,同时也欢迎大家在文末问答留言讨论. 2.读前必备 对于MCU节省内存办法大合集bug菌在很 ...
- 【swjtu】数据结构实验4_基于改进KMP算法的子串查找与替换
实验内容及要求: 从键盘输入主串s以及子串t1和t2.编写程序,将主串s中所有t1子串替换为t2子串,输出替换后得到的串以及t1被替换的次数.要求子串查找采用改进KMP算法. 实验目的:掌握KMP算法 ...
最新文章
- boost::distance用法的测试程序
- 揭秘重度MMORPG手游后台性能优化方案
- Chrome 键盘快捷键(Mac)
- JavaOne 2012覆盖率
- vue中的data用return返回
- 【MySql】MySql存储,游标,循环的简单使用
- python实现人脸识别比对_人脸识别并比对实现(基于face_recognition)
- mongodb客户端操作常用命令
- java实现订单物品计算佣金,java三角形、NextDay、佣金问题代码
- gpio能测Linux启动时间,linux – 如何自动测量新建图像的启动时间...
- admixture软件_使用ADMIXTURE进行群体结构分析
- 华为NP课程笔记23-VRRP
- 自动驾驶技术发展的5个阶段和现状
- 获取鼠标图片和鼠标位置的方法
- 华为手机热点无法连接_华为手机热点连不上
- Graph Neural Network(GAE,GVAE,ARGA)
- 【生活小捣鼓】登录PC端某网站,需要他人(不在身边)手机扫二维码,这时候该怎么办?
- JFinal和JBoot创建一个定时任务
- css页面一些动态效果展示
- 华为、OPPO、vivo、小米牵头制定快充协议统一技术
热门文章
- “赢在幻灯片”有奖征文启事
- 16.2互联网媒体信息讽刺识别
- module 'tensorflow.python.keras.backend' has no attribute 'get_graph'
- java后台生成分页_Java实现分页的前台页面和后台代码
- python如何把控制台输出保存到文件中_如何用10行代码完成目标检测
- C语言 — 编程规范、标识符命名规范
- Android studio如何打包APK文件
- git本地给远程仓库创建分支
- mysql知识点拾遗梳理
- MVC5+EF6之EF CRUD