【字典树模板(数组实现)】HDU 1251 统计难题

来源:互联网 发布:哈达迪nba数据 编辑:程序博客网 时间:2024/05/03 12:18



题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251

#include<cstdio>#include<cstring>#define NODE 1000005int next[NODE][26];//数组建树int v[NODE];//相同前缀个数int node;//节点个数void init(){    node=1;    memset(next[0],0,sizeof(next[0]));}void add(char *str){    int len=strlen(str);    int i;    int cur=0,k;    for(i=0;i<len;++i){        k=str[i]-'a';        if(next[cur][k]==0){            memset(next[node],0,sizeof(next[node]));            v[node]=0;            next[cur][k]=node++;                    }        v[next[cur][k]]++;        cur=next[cur][k];    }}        int cal(char *str){    int i,k,cur=0;    int len=strlen(str);    for(i=0;i<len;++i){        k=str[i]-'a';        if(next[cur][k])            cur=next[cur][k];        else            return 0;    }    return v[cur];}int main(){    int i;    char str[20];    init();    while(1){        gets(str);        if(str[0]=='\0')break;        add(str);    }    while(scanf("%s",str)!=EOF){        printf("%d\n",cal(str));    }    return 0;}


0 0