模板题,Trie树入门,慢慢熟悉一下吧。这次比上次成熟一点了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 26
typedef struct Trie
{
int next[MAXN];
int cnt;
};
Trie f[500000];
int tot;
void TrieInit()
{
int i;
tot=MAXN;
memset(f,0,sizeof(f));
for(i=0;i<MAXN;i++) f[0].next[i]=i+1;
}
void Insert(char *s)
{
int i,j,k,l;
l=strlen(s);
k=0;
for(i=0;i<l;i++)
{
if(f[k].next[s[i]-'a']!=0)
{
k=f[k].next[s[i]-'a'];
f[k].cnt++;
}
else
{
tot++;
f[k].next[s[i]-'a']=tot;
k=tot;
f[k].cnt++;
}
}
}
int ask(char *s)
{
int i,j,k,l;
l=strlen(s);
k=0;
for(i=0;i<l;i++)
{
if(f[k].next[s[i]-'a']!=0)
{
k=f[k].next[s[i]-'a'];
if(i==l-1) return f[k].cnt;
}
else
{
return 0;
}
}
}
int main()
{
char s[15];
int i,j,k,t,m,n;
TrieInit();
while(gets(s),strcmp(s,"\0")) Insert(s);
while(gets(s)) printf("%d\n",ask(s));
return 0;
}