记录编号 |
382686 |
评测结果 |
AAAAAAAAAAAAAAA |
题目名称 |
审查 |
最终得分 |
100 |
用户昵称 |
New World |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.127 s |
提交时间 |
2017-03-14 16:03:51 |
内存使用 |
12.01 MiB |
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL long long
#define Inf 2e9
const int maxn=100500;
int ch[maxn][26],fail[maxn],cnt,RT;
char s[maxn],ss[maxn];
int val[maxn];
void Insert(){
scanf("%s",s);int len=strlen(s);
int p=RT;
for(int i=0;i<len;i++) {
int c=s[i]-'a';
if(!ch[p][c])ch[p][c]=++cnt;
p=ch[p][c];
}
val[p]=len;
}
void Build(){
static int Head,Tail,q[maxn];
Head=Tail=0;
for(int i=0;i<26;i++)
if(ch[RT][i]) q[Tail++]=ch[RT][i];
while(Head^Tail){
int x=q[Head++];
for(int i=0;i<26;i++) {
if(!ch[x][i]){
ch[x][i]=ch[fail[x]][i];
continue;
}
int j=ch[fail[x]][i];
int tmp=ch[x][i];
fail[tmp]=j;q[Tail++]=tmp;
}
}
}
int ty[maxn],pos;
void Query(){
pos=0;int len=strlen(ss);
int p=RT;
for(int i=0;i<len;i++) {
s[++pos]=ss[i];
int c=ss[i]-'a';
while(p && !ch[p][c])p=fail[p];
p=ch[p][c];
ty[pos]=p;
pos-=val[p];
p=ty[pos];
}
}
void Init();
int main(){
freopen("censor.in","r",stdin);freopen("censor.out","w",stdout);
Init();
return 0;
}
void Init(){
scanf("%s",ss);
int n;scanf("%d",&n);
for(int i=1;i<=n;i++) Insert();
Build();
Query();
for(int i=1;i<=pos;i++) printf("%c",s[i]);
}
/*
beginthatthebreakofdawn
beginthatthebreakofdawn
*/