HDU 1251 统计难题
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1251
字典树的应用。。。。。
1 #include<cstdio> 2 #include<cstring> //memset函数的头文件 3 #include<iostream> 4 using namespace std; 5 struct node{ 6 int count; 7 node *next[26]; 8 node(){ //初始化数据 9 memset(next,NULL,sizeof(next)); 10 count=0; 11 } 12 }; 13 node *p,*root=new node(); 14 void insert(char *s)//插入新单词,即建立字典树 15 { 16 int i,k; 17 for(p=root,i=0;s[i];++i) 18 { 19 k=s[i]-'a'; 20 if(p->next[k]==NULL) p->next[k]=new node();//判断是不是新节点,如果是分配创建一个新节点来存贮 ,即root的next域对应的k位置是否为空 21 p=p->next[k]; 22 p->count++; //记录此字母出现的次数 23 } 24 } 25 int search(char *s) //寻找函数 26 { 27 int i,k; 28 for(p=root,i=0;s[i];++i) 29 { 30 k=s[i]-'a'; 31 if(p->next[k]==NULL) break; //一旦查找不到,立即跳出 32 p=p->next[k]; 33 } 34 if(s[i]) return 0;//s[i]!=0表示中间 35 return p->count; //返回出现的次数 36 } 37 int main() 38 { 39 char s[11]; 40 while(gets(s),*s) insert(s); //一直读入数据,直到遇到空字符串 41 while(gets(s)) 42 printf("%d\n",search(s)); 43 return 0; 44 }