字典树,过了样例,在测试点六往后RE了
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int MAXN=1e4+10;
inline string read_string()
{
char ch;
string s;
int cnt=0;
while((ch=getchar())!='\n')
{
s[cnt++]=ch;
}
}
struct trie
{
int nex[MAXN<<4][26+1]={0};
int cnt=0;
int exist[MAXN<<4]={0};
void insert(char *s)
{
int p=0;
int l=strlen(s);
for(int i=0;i<l;i++)
{
int c=s[i]-'a';
if(!nex[p][c])nex[p][c]=++cnt;
p=nex[p][c];
}
exist[p]++;
}
int find(char *s)
{
int p=0;
int l=strlen(s);
for(int i=0;i<l;i++)
{
int c=s[i]-'a';
if(!nex[p][c])return 0;
p=nex[p][c];
}
return exist[p]++;
}
}trie;
int n,m;
char sss[51];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>sss;
trie.insert(sss);
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
cin>>sss;
int opt=trie.find(sss);
if(opt==0)printf("WRONG\n");
if(opt==1)printf("OK\n");
if(opt>1)printf("REPEAT\n");
}
return 0;
}