字典树模板

抄的

#include<stdio.h>
#include<string.h>
const int maxnode=1000005;
const int sigma_size=26;
struct Trie{
    int ch[maxnode][sigma_size];
    int sz;
    int num[maxnode];
    Trie(){ 
        sz=1;
         memset(ch[0],0,sizeof(ch[0]));
         memset(num,0,sizeof(num));
    }
    int idx(char c)  { return c - 'a'; }
    
    
    void insert(char *s, int v){
        int  u=0, n =strlen(s);
        for(int i=0;i<n;i++){
            int c= idx(s[i]);
            if(!ch[u][c]){
                memset(ch[sz],0,sizeof(ch[sz]));
                
                num[sz]=0;
                ch[u][c]=sz++;
            }
            u=ch[u][c];
            num[u]++;
        } 
    }
 
 
    int search(char *s){
        int n=strlen(s);
        int u=0;
        for(int i=0;i<n;i++){
            int c=idx(s[i]);
            if(!ch[u][c])
                return 0;
            
            u=ch[u][c];
            
        }
        return num[u];
    }
};
Trie T;
int main()
{
    char s[15];
    int flag=0;
    
    while(gets(s)){
        if(s[0]=='')break;
        T.insert(s,1);
    }
    
    while(~scanf("%s",s)){
        printf("%d
",T.search(s));
    }
    
}
原文地址:https://www.cnblogs.com/ccsu-zry/p/9769536.html