HDU 1251 統計難題(字典樹)
阿新 • • 發佈:2019-02-06
#include<stdio.h> #include<string.h> struct Node { Node *next[26];//每個節點的分支由單詞性質決定,這裡是小寫的26個字母 int cnt;//每個節點可以儲存一些資訊,這道題是儲存該字首的數量 Node() { for(int i=0;i<26;i++) next[i]=NULL; cnt=0; } }; Node root; void insert(char *str) { Node *p=&root,*q; int len=strlen(str); int id; for(int i=0;i<len;i++) { id=str[i]-'a'; if(p->next[id]==NULL) { q=new Node; q->cnt++; p->next[id]=q; p=q; } else { p=p->next[id]; p->cnt++; } } } int find(char *str) { int len=strlen(str); Node *p=&root; int id; for(int i=0;i<len;i++) { id=str[i]-'a'; if(p->next[id]!=NULL) p=p->next[id]; else return 0; } return p->cnt; } int main() { char str[11]; if(gets(str)==NULL) return 0; //gets讀取EOF時返回值為NULL while(str[0]!='\0')//用gets就可以讀取到‘\n’,此時轉換為'\0' { insert(str); gets(str); } while(scanf("%s",str)!=EOF) { printf("%d\n",find(str)); } return 0; }