50,781
社区成员
发帖
与我相关
我的任务
分享
#include <bits/stdc++.h>
using namespace std;
#define db double
#define ll long long
#define inf 0x3f3f3f3f
#define s(a, n) memset(a, n, sizeof(a))
#define debug(a) cout << '#' << a << '#' << endl
#define rep(l, a, b) for (register ll l = a; l < b; ++l)
#define per(l, a, b) for (register ll l = a; l >= b; --l)
#define _ios ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define _forit(i, c) \
for (__typeof__((c).begin()) i = (c).begin(); i != (c).end(); ++i)
bool fi = true;
const unsigned long long MOD = 1e9 + 7;
inline ll gcd(ll a, ll b) { return (b == 0 ? a : gcd(b, a % b)); }
int cnt;
int trie[1000005][26];
int ex[1000005];
char s[1000005];
void insert(char *l) {
int n = strlen(l);
int p = 0;
// cnt = 0;
rep(i, 0, n) {
int c = l[i] - 'a';
// assert(trie[p][c]);
// printf("&& trie p c:%d, p:%d &&\n", trie[p][c], p);
if (!trie[p][c]) trie[p][c] = ++cnt;
p = trie[p][c];
}
ex[p] = 1;
}
int find(char *l) {
int p = 0;
int n = strlen(l);
rep(i, 0, n) {
int c = l[i] - 'a';
if (!trie[p][c]) return 0;
p = trie[p][c];
}
if (ex[p] == 1) {
ex[p] = -1;
return 1;
}
return ex[p];
}
char ans[3][10] = {"REPEAT\0", "WRONG\0", "OK\0"};
int main() {
cnt = 0;
s(ex, 0);
s(trie, 0);
int n;
scanf("%d", &n);
rep(i, 0, n) {
scanf("%s", s);
insert(s);
}
scanf("%d", &n);
rep(i, 0, n) {
scanf("%s", s);
printf("%s\n", ans[find(s) + 1]);
}
return 0;
}