Luogu P2580 于是他错误的点名开始了 Trie树 字典树

字典树裸题。每次插入询问串,查询的时候拿出来直接查,信息保留在节点上。

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

原文地址:https://www.cnblogs.com/maomao9173/p/10441277.html