字典樹(判斷有指定字首的單詞個數)
阿新 • • 發佈:2018-11-22
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxn 500005 int ch[maxn][26]; int val[maxn]; int num[maxn]; int sz; void clear() { memset(ch,0,sizeof(ch)); sz=0; //memset(num,0,sizeof(num)); } void insert(char*s) {int u=0,n=strlen(s); for(int i=0;i<n;i++) { int id=s[i]-'a'; if(ch[u][id]==0)//無該兒子 { ch[u][id]=++sz;//新建節點 //memset(ch[sz],0,sizeof(ch[sz])); //val[sz]=0; } u=ch[u][id]; num[u]++; } //val[u]=n; } int search(char*s) { int n=strlen(s),u=0; for(int i=0;i<n;i++) { int id=s[i]-'a'; if(ch[u][id]==0) return 0; u=ch[u][id]; } return num[u]; // } int main() {clear(); char str[20]; int res=0; while(gets(str)&&strcmp(str,"")!=0) { insert(str); } while(scanf("%s",str)!=EOF) { res=search(str); printf("%d\n",res); } return 0; }