字典树裸题 C++提交
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Tree
{
Tree *nxt[26];
int cnt;
}*td;
char s[12];
void init(Tree *t)
{
for(int i=0;i<26;++i) t->nxt[i]=NULL;
}
void build(Tree *t,int pos,int L)
{
if(pos>=L) return ;
int x=s[pos]-'a';
if(t->nxt[x]==NULL)
{
t->nxt[x]=(Tree*)malloc(sizeof(Tree));
init(t->nxt[x]);
t->nxt[x]->cnt=1;
build(t->nxt[x],pos+1,L);
return;
}
t->nxt[x]->cnt++;
build(t->nxt[x],pos+1,L);
}
int query(Tree *t,int pos,int L)
{
if(pos==L) return t->cnt;
int x=s[pos]-'a';
if(t->nxt[x]==NULL) return 0;
return query(t->nxt[x],pos+1,L);
}
void del(Tree *t)
{
for(int i=0;i<26;i++)
{
if(t->nxt[i]!=NULL)
del(t->nxt[i]);
}
free(t);
}
int main()
{
int n,m;
while(~scanf("%d",&n))
{
td=(Tree*)malloc(sizeof(Tree));
init(td);
for(int i=0;i<n;++i)
{
scanf("%s",s);
build(td,0,(int)strlen(s));
}
scanf("%d",&m);
for(int i=0;i<n;++i)
{
scanf("%s",s);
printf("%d\n",query(td,0,(int)strlen(s)));
}
del(td);
}
return 0;
}