ACM: SCU 4438 Censor - KMP
Description
Censor
frog is now a editor to censor so-called sensitive words (敏感词).
She has a long text pp. Her job is relatively simple -- just to find the first occurence of sensitive word ww and remove it.
frog repeats over and over again. Help her do the tedious work.
Input
The input consists of multiple tests. For each test:
The first line contains 11 string ww. The second line contains 11 string pp.
(1≤length of w,p≤5⋅1061≤length of w,p≤5⋅106, w,pw,p consists of only lowercase letter)
Output
For each test, write 11 string which denotes the censored text.
Sample Input
abc
aaabcbc
b
bbb
abc
ab
Sample Output
a
ab
/*/
题意:
给出两个字符串T和S,把所有在S中出现的T删掉,并且合并S,如果合并后还有T继续删掉。 KMP算法,练习 关键在于next表的建立,还有怎么利用next去查询字符串是否相同。 这里推荐一个大佬的博客,我也是从上面学习到的:
next->door( http://blog.csdn.net/sjf0115/article/details/8579484 ) 然后KMP主要有两种用法,一种是用数组+模拟指针去覆盖掉匹配了的字符串,一种是用栈去弹掉匹配成功的串串,理论基本相同。 AC代码:
/*/
#include"algorithm"
#include"iostream"
#include"cstring"
#include"cstdlib"
#include"cstdio"
#include"string"
#include"vector"
#include"stack"
#include"queue"
#include"cmath"
#include"map"
using namespace std;
typedef long long LL ;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define FK(x) cout<<"["<<x<<"]\n"
#define memset(x,y) memset(x,y,sizeof(x))
#define memcpy(x,y) memcpy(x,y,sizeof(x))
#define bigfor(T) for(int qq=1;qq<= T ;qq++) const int MX=5555555;
/***************************************************/
char s[MX],t[MX],ans[MX];
int next[MX],pos[MX],len1,len2; void init() {
memset(ans,0);
memset(pos,0);
memset(next,0);
} struct Node {
char ch;
int j;
Node() {};
Node(char c,int n):ch(c),j(n) {};
}; void GetNext() {
int i=0,j=-1;
next[0]=-1;
while(i<len2) {
if(j==-1||t[i]==t[j]) {
i++;
j++;
if(t[i]==t[j]) {
next[i]=next[j];
} else next[i]=j;
} else j=next[j];
}
} void KMPStack() {
int i = 0, j = 0;
stack<Node> st;
while(i < len1) {
if(j == -1 || s[i] == t[j]) {//如果前面找不到相匹配的字符或者两个字符相同,加入栈。
j ++;
st.push(Node(s[i], j));
i ++;
} else j = next[j];
if(j == len2) { //匹配成功把栈内的匹配到的T串弹出。
int len = len2;
while(len --) st.pop();
if(st.empty()) j = 0;//如果栈已经空了j返回到0;
else j = st.top().j; //如果不是空的,j变为最后一个字符的next值。
}
}
int cnt = 0;
while(!st.empty()) {
ans[cnt ++] = st.top().ch;
st.pop();
}
for(int i=cnt-1; i>=0; i--) {
putchar(ans[i]);
}
puts("");
} /************************************************/
void KMP() {
int i=0,j=0;
int cnt=0;
while(i<len1) {
ans[cnt]=s[i++]; //字符串一个个的往暗示里面读入
while(!(j==-1||ans[cnt]==t[j])) {
j=next[j];
}
j++;
cnt++; //模拟指针
pos[cnt]=j;
if(j==len2) { //如果找到匹配字符串长度的,指针指回该被匹配到的字符串最初位置
cnt-=len2;
j=pos[cnt];
}
}
// puts(ans);
for(int i=0; i<cnt; i++) {
putchar(ans[i]);
}
puts("");
}
/************************************************/ int main() {
while(~scanf("%s %s",t,s)) {
init();
len1=strlen(s);
len2=strlen(t);
GetNext();
// KMP(); //数组
KMPStack();//栈
}
return 0;
}
ACM: SCU 4438 Censor - KMP的更多相关文章
- SCU 4438 Censor|KMP变形题
传送门 Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text P. He ...
- SCU 4438 Censor KMP/Hash
题意:给定一个模式串和文本,要求删除所有模式串.可能删除后会形成新的模式串,必须全部删除. 思路1:kmp算法求得失配数组,用一个match数组记录文本串中第i字符和未删除的字符能匹配模式串的长度.这 ...
- SCU 4438 Censor(哈希+模拟栈)
Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text \(p\). He ...
- SCU 4438:Censor
Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text p . Her j ...
- SCU 4438 Censor(Hash)题解
题意:找出字符串p中的w串删除,反复操作,直到找不到w,输出这个串 思路:哈希处理前缀和,如果值相同就删掉. 代码: #include<iostream> #include<algo ...
- Censor SCU - 4438
frog is now a editor to censor so-called sensitive words (敏感词). She has a long text (p). Her job is ...
- 四川省赛 SCU - 4438
Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...
- Censor(KMP)
Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...
- ACM:SCU 4437 Carries - 水题
SCU 4437 Carries Time Limit:0MS Memory Limit:0KB 64bit IO Format:%lld & %llu Practice ...
随机推荐
- 探索Aspnetcore+mysql+efcore
摘要 之前尝试了,新建asp.net core站点,那么如何和mysql建立连接,如果操作mysql?本篇将尝试使用EntityFrameworkCore进行mysql的操作. 一个例子 首先新建一个 ...
- 前端工具之Gulp
Gulp是一款前端自动化的工具,如果能熟练使用Gulp来进行开发一定可以节省很多的时间,也可以快速的提高工作效率. 在使用Gulp之前就是要配置好Gulp安装的环境,这是我们能使用Gulp快速开发的第 ...
- cf723d Lakes in Berland
The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × 1. Each cel ...
- 代理模式及jdk动态代理原理
代理模式 :为其它对象提供代理,以控制对这个对象的访问. 代理模式的特征:代理类(proxyClass)与委托类(realClass)有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转 ...
- 【WIN10】绑定x:Bind
在WP8.WP8中,我们知道有一个绑定{Binding},而在Win10中,新增了一个绑定{x:Bind} x:Bind :为编译时绑定 ,内存.内存相对于传统绑定都有优化 特性: 1.为强类型 ...
- 项目里面的某个资源文件(比如plist、音频等)无法使用
检查:Build Phases -> Copy Bundle Resources
- average slice
A non-empty zero-indexed array A consisting of N integers is given. A pair of integers (P, Q), such ...
- iOS抓包利器Charles
iOS抓包利器Charles http://wonderffee.github.io/blog/2013/07/13/best-packet-capture-tool-charles-in-ios/ ...
- spring Quartz多个定时任务的配置
Quartz多个定时任务的配置 1,配置文件与spring整合,需要在spring 的总配置中一入或者在web.xml中spring监听中加上 ztc_cp-spring-quartz.xml 注:定 ...
- FileReader:读取本地图片文件并显示
最近忙得比狗还惨,导致长时间没能更新文章,真心对不住啊.抽空整理了下关于在页面上读取和显示本地图片的实例文章,本文通过实例讲解如何使用支持FileReader浏览器的用户将能够通过一个file inp ...