求调(玄关)
查看原帖
求调(玄关)
866535
juruo5e59楼主2024/7/17 18:52

求调

我数组开太大了MLE,开小了RE,有没有奆佬帮我看一下开多大。qwq

(或者帮我改一下做法也行)

RE记录

MLE记录

RE:

#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;
}

MLE:

#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;
}
2024/7/17 18:52
加载中...