记录编号 |
472146 |
评测结果 |
AAAAAAAAAAA |
题目名称 |
文章过滤器 |
最终得分 |
100 |
用户昵称 |
JustWB |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.016 s |
提交时间 |
2017-11-07 12:49:14 |
内存使用 |
0.98 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
const int maxn=1e5+5;
using namespace std;
void pro(int now);
int n,next[maxn];
char w[51][21];
char c[maxn],C[maxn];
bool J[maxn];
int main()
{
freopen("fliter.in","r",stdin);
freopen("fliter.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",w[i]);
for(int j=strlen(w[i])-1;j>=0;j--)w[i][j]=tolower(w[i][j]);
}
getchar();
char temp=getchar();
for(int i=0;temp!='\n';i++,temp=getchar())c[i]=tolower(temp),C[i]=temp;
int str=strlen(c);
for(int i=1;i<=n;i++)
{
pro(i);
int j=0,m=strlen(w[i]);
for(int k=0;k<str;k++)
{
while(j&&c[k]!=w[i][j])j=next[j];
if(c[k]==w[i][j])j++;
if(j==m)
for(int l=k-m+1;l<=k;l++)J[l]=true;
}
}
for(int i=0;i<str;i++)
if(J[i])putchar('*');
else putchar(C[i]);
return 0;
}
void pro(int now)
{
int len=strlen(w[now]);
memset(next,0,sizeof(next));
next[0]=next[1]=0;
for(int i=1;i<len;i++)
{
int j=next[i];
while(j&&w[now][i]!=w[now][j])j=next[j];
next[i+1]= w[now][i]==w[now][j] ? j+1:0;
}
}