#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
struct node
{
int next[26];
int cnt;
void init()
{
cnt=0;
memset(next,-1,sizeof(next));
}
}a[maxn];
int cnt;
char s[15];
void update()
{
int now,pos;
now=pos=0;
while(s[now])
{
if(a[pos].next[s[now]-'a']==-1)
{
a[cnt].init();
a[pos].next[s[now]-'a']=cnt++;
}
pos=a[pos].next[s[now]-'a'];
a[pos].cnt++;
now++;
}
}
void ask()
{
int now,pos;
now=pos=0;
while(s[now])
{
if(a[pos].next[s[now]-'a']==-1)
{
printf("0\n");
return;
}
pos=a[pos].next[s[now]-'a'];
now++;
}
printf("%d\n",a[pos].cnt);
}
int main()
{
int n,m,i;
scanf("%d",&n);
cnt=1;//找了一个公共节点
a[0].init();
for(i=0;i<n;i++)
{
scanf("%s",s);
update();
}
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%s",s);
ask();
}
return 0;
}
hiho 1014 trie树
最新推荐文章于 2018-07-21 18:19:28 发布