记录编号 397325 评测结果 AAAAAAAAAAAAAAA
题目名称 审查 最终得分 100
用户昵称 GravatarGo灬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]);
}