题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1075
Trie树的入门题。
代码:
#include<stdio.h>
#include<string.h>
const int maxnode=1000005;
const int sigma_size=26;
struct Trie{
int ch[maxnode][sigma_size];
int sz;
int num[maxnode];
Trie(){
sz=1;
memset(ch[0],0,sizeof(ch[0]));
memset(num,0,sizeof(num));
}
int idx(char c) { return c - 'a'; }
void insert(char *s, int v){
int u=0, n =strlen(s);
for(int i=0;i<n;i++){
int c= idx(s[i]);
if(!ch[u][c]){
memset(ch[sz],0,sizeof(ch[sz]));
num[sz]=0;
ch[u][c]=sz++;
}
u=ch[u][c];
num[u]++;
}
}
int search(char *s){
int n=strlen(s);
int u=0;
for(int i=0;i<n;i++){
int c=idx(s[i]);
if(!ch[u][c])
return 0;
u=ch[u][c];
}
return num[u];
}
};
Trie T;
int main()
{
char s[15];
int flag=0;
while(gets(s)){
if(s[0]=='\0')break;
T.insert(s,1);
}
while(~scanf("%s",s)){
printf("%d\n",T.search(s));
}
}