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;
}