比赛 |
20150420 |
评测结果 |
AWAWWAWWAAWWWTA |
题目名称 |
审查 |
最终得分 |
40 |
用户昵称 |
wolf. |
运行时间 |
1.802 s |
代码语言 |
C++ |
内存使用 |
0.29 MiB |
提交时间 |
2015-04-20 10:05:22 |
显示代码纯文本
#include<iostream>
#include<fstream>
#include<bitset>
#include<vector>
#include<deque>
#include<map>
#include<set>
#include<queue>
#include<string>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstdio>
using namespace std;
#if defined wolf
const string ok="OK";
const string kk=" ";
ofstream nnew("censor.in",ios::app);
ifstream fin("censor.in");
#define fout cout
#define Endl endl
#else
ifstream fin("censor.in");
ofstream fout("censor.out");
#endif
class node{
public:
int back;
int n;
int k;
bool flag;
vector<int> son;
node(){
flag=0;
k=0;
son.resize(26,0);
}
node(int a){
n=a;
k=0;
flag=0;
son.resize(26,0);
}
int find(int n){
if(n<0||n>=26)
return 0;
return son[n];
}
void insert(int n,int v){
son[n]=v;
}
};
vector<node> TT;
string text;
void _insert(string txt){
int it=0;
for(int i=0;i!=txt.size();++i){
int pp=TT[it].find(txt[i]-'a');
if(pp==0){
TT[it].insert(txt[i]-'a',TT.size());
TT.push_back(node(txt[i]-'a'));
it=TT.size()-1;
}else{
it=pp;
}
}
TT[it].k=txt.size();
TT[it].flag=1;
}
void AC(){
TT[0].back=0;
queue<int> Q;//储存下一个点的下标
for(int i=0;i!=26;++i){
int pp=TT[0].find(i);
if(pp==0){
continue;
}
TT[pp].back=0;
Q.push(pp);
}
while(!Q.empty()){
int now=Q.front();
Q.pop();
for(int i=0;i!=26;++i){
int nex=TT[now].find(i);
if(nex!=0){
Q.push(nex);
int it=TT[now].back;
int record=TT[it].find(TT[nex].n);
while(it!=0&&record==0){
it=TT[it].back;
record=TT[it].find(TT[nex].n);
}
TT[nex].back=record;
}
}
}
}
int ans=0;
/*void _plus(int it,int i){
whitle(it!=0){
itf(TT[it].flag!=0){
ans++;
}
it=TT[it].back;
}
}*/
void core(int mmax){
int it=0;
for(int i=0;i!=text.size();++i){
if(text[i]=='@'){
continue;
}
int r=TT[it].find(text[i]-'a');
while(r==0&&it!=0){
it=TT[it].back;
r=TT[it].find(text[i]-'a');
}
if(r==0){
it=0;
continue;
}
it=r;
if(TT[it].flag){
//cout<<text.substr(0,i)<<endl;
int l=0;
for(int j=i;j>=0;--j){
if(text[j]=='@'){
continue;
}
text[j]='@';
l++;
if(l==TT[it].k){
break;
}
}
i-=TT[it].k;
i-=mmax;
it=0;
if(i<0){
i=0;
}
}
}
}
int main(){
fin>>text;
int n,mmax=0;
fin>>n;
TT.resize(1,-1);
for(int i=0;i!=n;++i){
string txt;
fin>>txt;
mmax=max(mmax,(int)txt.size());
_insert(txt);
}
AC();
/*for(int i=0;i!=TT.size();++i){
cout<<(char)(TT[i].n+'a')<<kk<<TT[i].flag<<kk<<TT[i].back<<endl;
}*/
core(mmax);
for(int i=0;i!=text.size();++i){
if(text[i]!='@'){
fout<<text[i];
}
}
//cout<<ans<<endl;
//-------------------------*/
#if defined wolf
cout<<endl<<(double)clock()/CLOCKS_PER_SEC<<'s'<<endl;
#endif
return 0;
}
//Designed by wolf
//Mon Apr 20 2015