我数组开太大了MLE,开小了RE,有没有奆佬帮我看一下开多大。qwq
(或者帮我改一下做法也行)
#include <bits/stdc++.h>
using namespace std;
struct trie_tree {
int trie[1200010][27], np;
bool vis[1200010], rept[1200010]; //再大一点就会爆炸
trie_tree() {
memset(trie, -1, sizeof(trie));
memset(vis, 0, sizeof(vis));
memset(rept, 0, sizeof(rept));
np = 0;
}
void insert(string s) {
int now = 0, n = s.size();
for (int i = 0; i < n; i ++) {
int id = s[i] - 'a' + 1;
if (trie[now][id] == -1) trie[now][id] = ++ np;
now = trie[now][id];
}
vis[now] = 1;
}
void insrept(string s) {
int now = 0, n = s.size();
for (int i = 0; i < n; i ++) {
int id = s[i] - 'a' + 1;
if (trie[now][id] == -1) trie[now][id] = ++ np;
now = trie[now][id];
}
rept[now] = 1;
}
int find(string s) {
int now = 0, n = s.size();
for (int i = 0; i < n; i ++) {
int id = s[i] - 'a' + 1;
if (trie[now][id] == -1) return 0;
now = trie[now][id];
}
if (rept[now]) return 1;
else if (vis[now]) return 2;
else return 0;
}
};
trie_tree tre;
string s;
signed main() {
ios::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
int n, q;
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> s;
tre.insert(s);
}
cin >> q;
for (int i = 1; i <= q; i ++) {
cin >> s;
int fd = tre.find(s);
if (fd == 0) cout << "WRONG" << endl;
else if (fd == 1) cout << "REPEAT" << endl;
else cout << "OK" << endl;
tre.insrept(s);
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
struct trie_tree {
int trie[1300010][27], np;
bool vis[1300010], rept[1300010];
trie_tree() {
memset(trie, -1, sizeof(trie));
memset(vis, 0, sizeof(vis));
memset(rept, 0, sizeof(rept));
np = 0;
}
void insert(string s) {
int now = 0, n = s.size();
for (int i = 0; i < n; i ++) {
int id = s[i] - 'a' + 1;
if (trie[now][id] == -1) trie[now][id] = ++ np;
now = trie[now][id];
}
vis[now] = 1;
}
void insrept(string s) {
int now = 0, n = s.size();
for (int i = 0; i < n; i ++) {
int id = s[i] - 'a' + 1;
if (trie[now][id] == -1) trie[now][id] = ++ np;
now = trie[now][id];
}
rept[now] = 1;
}
int find(string s) {
int now = 0, n = s.size();
for (int i = 0; i < n; i ++) {
int id = s[i] - 'a' + 1;
if (trie[now][id] == -1) return 0;
now = trie[now][id];
}
if (rept[now]) return 1;
else if (vis[now]) return 2;
else return 0;
}
};
trie_tree tre;
string s;
signed main() {
ios::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
int n, q;
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> s;
tre.insert(s);
}
cin >> q;
for (int i = 1; i <= q; i ++) {
cin >> s;
int fd = tre.find(s);
if (fd == 0) cout << "WRONG" << endl;
else if (fd == 1) cout << "REPEAT" << endl;
else cout << "OK" << endl;
tre.insrept(s);
}
return 0;
}