题目链接:洛谷P2580 于是他错误的点名开始了
最近在重新学字符串体系,打算从头开始好好学习;
这里先贴一个trie的板子;
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long ll;
const int maxn=5e5+7;
const int mod=1e9+7;
const ll INF=1e18;
char s[maxn];
struct trie
{
int nex[maxn][30],cnt;
int exist[maxn];
void insert(char *s,int l) //插入字符串
{
int p=0;
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]=1;
}
int find(char *s,int l) //查找字符串
{
int p=0;
for(int i=0;i<l;i++)
{
int c=s[i]-'a';
if(!nex[p][c]) return false;
p=nex[p][c];
}
int tmp=exist[p];
if(exist[p]) exist[p]++;
return tmp;
}
}Trie;
void rua()
{
int n;scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",s);
Trie.insert(s,strlen(s));
}
int m;scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%s",s);
int res=Trie.find(s,strlen(s));
if(res==0) puts("WRONG");
else if(res==1) puts("OK");
else puts("REPEAT");
}
return;
}
int main()
{
rua();
return 0;
}