hdu1251 字典树

来源:互联网 发布:网络会员制营销 编辑:程序博客网 时间:2024/04/30 13:20

统计前缀,模板的字典树~


#include<stdio.h>#include<stdlib.h>#include<string.h>using namespace std;struct node{    int cnt;    node *next[26];}*root;node *build(){    node *p=(node *)malloc(sizeof(node));    for(int i=0;i<26;i++)        p->next[i]=NULL;    p->cnt=1;//初始化应该是1。。    return p;}void insert(char *word)//构造字典树{    int len=strlen(word);    node *p;    p=root;    for(int i=0;i<len;i++)    {        if(p->next[word[i]-'a']==NULL)            p->next[word[i]-'a']=build();        else p->next[word[i]-'a']->cnt++;//计数        //printf("cnt%d\n",p->next[word[i]-'a']->cnt);        p=p->next[word[i]-'a'];    }}int query(char *ask){    int ans=0;    int len=strlen(ask);    node *p;    p=root;    for(int i=0;i<len;i++)    {        if(!(p->next[ask[i]-'a']))            return 0;        ans=p->next[ask[i]-'a']->cnt;p=p->next[ask[i]-'a'];    }    return ans;}int main(){    char word[15],ask[15];    root=build();    while(gets(word)&&word[0])//.........跪在输入上,gets是可以有空格的,scanf不可以    {        insert(word);    }    while(scanf("%s",ask)!=EOF)    {        printf("%d\n",query(ask));    }    return 0;}


0 0
原创粉丝点击