记录编号 |
397325 |
评测结果 |
AAAAAAAAAAAAAAA |
题目名称 |
审查 |
最终得分 |
100 |
用户昵称 |
Go灬Fire |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.136 s |
提交时间 |
2017-04-20 07:42:21 |
内存使用 |
12.63 MiB |
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL long long
#define Inf 2e9
#define fcl fclose(stdin);fclose(stdout);
const int maxn=105000;
char ss[maxn],s[maxn];
int n;
int ch[maxn][26],fail[maxn],RT,cnt;
int val[maxn];
void Insert(){
int p=RT;
int len=strlen(s+1);
for(int i=1;i<=len;i++){
int c=s[i]-'a';
if(!ch[p][c]) ch[p][c]=++cnt;
p=ch[p][c];
}
val[p]=max(val[p],len);
}
int q[maxn],Head,Tail;
void Build(){
Head=Tail=0;
for(int i=0;i<=25;i++)
if(ch[RT][i]) q[Tail++]=ch[RT][i];
while(Head^Tail){
int x=q[Head++];
for(int i=0;i<=25;i++){
int &tmp=ch[x][i];
if(!tmp) {tmp=ch[fail[x]][i];continue;}
fail[tmp]=ch[fail[x]][i];
q[Tail++]=tmp;
}
}
}
char Ans[maxn];
int totlen,to[maxn];
void Query(){
int p=RT;
int len=strlen(ss+1);
for(int i=1;i<=len;i++){
int c=ss[i]-'a';
Ans[++totlen]=ss[i];
p=ch[p][c];
to[totlen]=p;
totlen-=val[p];
p=to[totlen];
}
}
void Init();
int main(){
freopen("censor.in","r",stdin);
freopen("censor.out","w",stdout);
Init();
getchar();getchar();
fcl;
return 0;
}
void Init(){
scanf("%s",ss+1);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",s+1);
Insert();
}
Build();
Query();
for(int i=1;i<=totlen;i++)printf("%c",Ans[i]);
}