luogu2580 于是他错误的点名开始了 Trie树
模板题
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct Node{
int cnt, son[29];
bool hav;
Node(){
cnt = hav = 0;
}
}trie[500005];
int c, n, m, len;
char s[55];
void ins(){
int u=0;
for(int i=0; i<len; i++){
int v=s[i]-'a';
if(!trie[u].son[v]) trie[u].son[v] = ++c;
u = trie[u].son[v];
}
trie[u].hav = true;
}
int que(){
int u=0;
for(int i=0; i<len; i++){
int v=s[i]-'a';
if(!trie[u].son[v]) return 3;
u = trie[u].son[v];
}
if(!trie[u].hav) return 3;
if(!trie[u].cnt){
trie[u].cnt++;
return 1;
}
return 2;
}
int main(){
cin>>n;
for(int i=1; i<=n; i++){
scanf("%s", s);
len = strlen(s);
ins();
}
cin>>m;
for(int i=1; i<=m; i++){
scanf("%s", s);
len = strlen(s);
int t=que();
if(t==1) printf("OK\n");
else if(t==2) printf("REPEAT\n");
else printf("WRONG\n");
}
return 0;
}
拙いものと思えども、
その手に握る其れこそが、
いつか幻想を生んでいく。