字典树模板(略丑)

int trie[N][65],cnt[N],idx;
int getnum(char x){
    if(x>='A'&&x<='Z')
        return x-'A';
    else if(x>='a'&&x<='z')
        return x-'a'+26;
    else
        return x-'0'+52;
} 
void add(string x){
	int p=0;
    for(int i=0;i<x.size();i++){
    	int tmp=getnum(x[i]);
        if(!trie[p][tmp]) trie[p][tmp]=++idx;
		p=trie[p][tmp];
		cnt[p]++;
	}
}
int trie_find(string x){
	int p=0;
    for(int i=0;i<x.size();i++){
    	int tmp=getnum(x[i]);
    	if(!trie[p][tmp]) return 0; 
    	p=trie[p][tmp];
    }
	return cnt[p];
}
1 个赞