模板 Trie树

模板 Trie树

code:

#include <iostream>
#include <cstdio>

using namespace std;

const int wx=20017;

inline int read(){
	int sum=0,f=1; char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
	while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0'; ch=getchar();}
	return sum*f;
}

struct Trie{
	int tr[wx][27];
	int cnt;
	int flag[wx];
	
	void insert(char *s){
		int p=0;
		for(int i=0;s[i];i++){
			int k=s[i]-'a';
			if(!tr[p][k])tr[p][k]=++cnt;
			p=tr[p][k];
		}
		flag[p]=1;
	}
	
	bool query(char *s){
		int p=0;
		for(int i=0;s[i];i++){
			int k=s[i]-'a';
			if(!tr[p][k])return false;
			p=tr[p][k];
		}
		if(flag[p])return true;
		return false;
	}
}Trie;

int n;
int m;
char c[wx];

int main(){
	n=read();
	for(int i=1;i<=n;i++)
		scanf("%s",c),Trie.insert(c);
	m=read();
	for(int i=1;i<=n;i++)
		scanf("%s",c),printf("%d\n",Trie.query(c));
	return 0;
}
posted @ 2018-10-30 17:47  _王小呆  阅读(119)  评论(0编辑  收藏  举报