您的位置:首页 > Web前端

BZOJ3942 [Usaco2015 Feb]Censoring

2015-04-15 22:35 465 查看
维护一个栈。。。如果栈顶出现了要被删除的字符串就全删掉就好了,判断的话。。。kmp就行了

/**************************************************************
Problem: 3942
User: rausen
Language: C++
Result: Accepted
Time:224 ms
Memory:11548 kb
****************************************************************/

#include <cstdio>
#include <cstring>

using namespace std;
const int N = 1e6 + 5;

char s1
, s2
, s
;
int next
, a
, top;

int main() {
int i, j, len;
gets(s1 + 1), gets(s2 + 1);
len = strlen(s2 + 1);
for (i = 2, j = next[1] = 0; s2[i]; ++i) {
while (j && s2[i] != s2[j + 1]) j = next[j];
if (s2[i] == s2[j + 1]) ++j;
next[i] = j;
}
for (i = 1; s1[i]; ++i) {
j = a[top], s[++top] = s1[i];
while (j && s2[j + 1] != s[top]) j = next[j];
if (s[top] == s2[j + 1]) ++j;
a[top] = j;
if (a[top] == len) top -= len;
}
s[top + 1] = '\0';
puts(s + 1);
return 0;
}


View Code
(p.s. AC600纪念~)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: