洛谷P2580
这是一个字典树的问题 如果不了解的话可以去看看这篇文章字典树写的非常好
AC代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int mp[maxn][30];
int node=1;
int vis[maxn],ans[maxn];
void insert_(char s[])
{
int p=0;
int len=strlen(s);
for(int i=0;i<len;i++)
{
int ss=s[i]-'a';
if(mp[p][ss]==0)
{
mp[p][ss]=node;
node++;
}
p=mp[p][ss];
}
ans[p]=1;
}
int search_(char s[])
{
int len=strlen(s);
int p=0;
for(int i=0;i<len;i++)
{
int ss=s[i]-'a';
if(mp[p][ss]==0)
{
return 0;
}
p=mp[p][ss];
}
if(ans[p]==0)
{
return 0;
}
else if(ans[p]==1)
{
vis[p]++;
if(vis[p]==1)
{
return 1;
}
return 2;
}
}
int main()
{
int n,m;
char s1[60],s2[60];
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",s1);
insert_(s1);
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%s",s2);
int cal=search_(s2);
if(cal==0)
{
printf("WRONG\n");
}
else if(cal==1)
{
printf("OK\n");
}
else
{
printf("REPEAT\n");
}
}
return 0;
}