HDU 1251 统计难题

http://acm.hdu.edu.cn/showproblem.php?pid=1251

第一道Trie树,感觉有点厉害

View Code
#include <stdio.h>

#include <string.h> 

#include <stdlib.h> 

const int MAX=26; 

typedef struct Trie

{

    Trie *next[MAX];

    int v;

}Trie;

Trie root;

void create(char *str)

{

    int len=strlen(str);

    Trie *p=&root,*q;

    for(int i=0;i<len;i++)

    {

        int id=str[i]-'a';

        if(p->next[id]==NULL)

        { 

            q=(Trie*)malloc(sizeof(Trie));

            q->v=1;

            for(int j=0;j<MAX;j++)

                q->next[j]=NULL;

            p->next[id]=q;

            p=p->next[id]; 

        }

        else

        {

            p->next[id]->v++;

            p=p->next[id];

        } 

    } 

} 

int find(char *str)

{ 

    int len=strlen(str);

    Trie *p=&root; 

    for(int i=0;i<len;i++)

    {

        int id=str[i]-'a';

        p=p->next[id];

        if(p==NULL)return 0;

    }

    return p->v;

} 

int main()

{

    char str[11];

    for(int i=0;i<MAX;i++)

        root.next[i]=NULL; 

    while(gets(str)&&str[0]!='\0')

        create(str);

    while(~scanf("%s",str))

        printf("%d\n",find(str));

    return 0;

} 

 

你可能感兴趣的:(HDU)