字典树裸题。每次插入询问串,查询的时候拿出来直接查,信息保留在节点上。
#include <bits/stdc++.h>
using namespace std;
char s[51];
int n, m, max_size = 0;
int ch[500010][27], sum[500010];
void add_str () {
int l = strlen (s), now = 0;
for (int i = 0; i < l; ++i) {
if (!ch[now][s[i] - 'a']) {
ch[now][s[i] - 'a'] = ++max_size;
}
now = ch[now][s[i] - 'a'];
}
sum[now] = 1;
}
void get_ans () {
int l = strlen (s), now = 0;
for (int i = 0; i < l; ++i) {
if (!ch[now][s[i] - 'a']) {
puts ("WRONG");
return;
}
now = ch[now][s[i] - 'a'];
}
if (sum[now] == 1) {
puts ("OK");
sum[now]++;
} else if (sum[now] == 2) {
puts ("REPEAT");
} else if (sum[now] == 0) {
puts ("WRONG");
}
}
int main () {
cin >> n;
for (int i = 1; i <= n; ++i) {
scanf ("%s", s);
add_str ();
}
cin >> m;
for (int i = 1; i <= m; ++i) {
scanf ("%s", s);
get_ans ();
}
}