hud 1251 统计难题
//我写的字典树//统计难题(统计一堆字符串中的前缀出现次数)#include <iostream>#include <stdio.h>using namespace std;struct node{ node *next[26]; int num;};node *root,memory[1000005];int cnt=0;//创建node *creatnode(){ node *p=&memory[cnt++]; p->num=1; for(int i=0;i<26;i++) { p->next[i]=NULL; } return p;}//插入void insertnode(char *s){ node *p=root; int k; for(int i=0;s[i];i++) { k=s[i]-'a'; if(p->next[k]==NULL) { p->next[k]=creatnode(); } else { p->next[k]->num++; } p=p->next[k]; }}//查找int searchnode(char *s){ node *p=root; int k; for(int i=0;s[i];i++) { k=s[i]-'a'; if(p->next[k]==NULL) return 0; else p=p->next[k]; } return p->num;}int main(){ char ch[105]; int sum; root=creatnode(); while(gets(ch)) { if(ch[0]==0) break; insertnode(ch); } while(gets(ch)) { if(ch[0]==0) break; sum=searchnode(ch); printf("%d\n",sum); } return 0;}
?