题解 P2580 【于是他错误的点名开始了】
可以算是模版了
#include<iomanip>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=10000*50+7;
int n,m,trie[maxn][26],rt=1,cnt=1,mark[maxn];char s[55];
void Insert(int &x,int now,int len)
{
if(!x) x=++cnt;
if(now==len) mark[x]=1;
else Insert(trie[x][s[now]-'a'],now+1,len);
}
int my_find(int x,int now,int len)
{
if(now==len)
{
if(++mark[x]==1) {mark[x]--;return 0;}
else if(mark[x]==2) return 1;
else return -1;
}
else return my_find(trie[x][s[now]-'a'],now+1,len);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%s",s);int len=strlen(s);
Insert(rt,0,len);
}
scanf("%d",&m);
for(int i=1;i<=m;++i)
{
scanf("%s",s);int len=strlen(s);
int k=my_find(rt,0,len);
if(!k) printf("WRONG\n");
else printf((k<0)?"REPEAT\n":"OK\n");
}
return 0;
}