luogu2580 于是他错误的点名开始了 Trie树

模板题

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct Node{
	int cnt, son[29];
	bool hav;
	Node(){
		cnt = hav = 0;
	}
}trie[500005];
int c, n, m, len;
char s[55];
void ins(){
	int u=0;
	for(int i=0; i<len; i++){
		int v=s[i]-'a';
		if(!trie[u].son[v])	trie[u].son[v] = ++c;
		u = trie[u].son[v];
	}
	trie[u].hav = true;
}
int que(){
	int u=0;
	for(int i=0; i<len; i++){
		int v=s[i]-'a';
		if(!trie[u].son[v])	return 3;
		u = trie[u].son[v];
	}
	if(!trie[u].hav)	return 3;
	if(!trie[u].cnt){
		trie[u].cnt++;
		return 1;
	}
	return 2;
}
int main(){
	cin>>n;
	for(int i=1; i<=n; i++){
		scanf("%s", s);
		len = strlen(s);
		ins();
	}
	cin>>m;
	for(int i=1; i<=m; i++){
		scanf("%s", s);
		len = strlen(s);
		int t=que();
		if(t==1)	printf("OK
");
		else if(t==2)	printf("REPEAT
");
		else	printf("WRONG
");
	}
	return 0;
}
原文地址:https://www.cnblogs.com/poorpool/p/7922496.html