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