链接:点击打开链接
题意:有A,B两个集合,A中含有n个字符串,B中含有m个字符串,询问A中以B中每个字符串为前缀的串有多少个
代码:
#include <queue>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
char a[15];
int rt,v[1000005],s[1000005][30];
void in(char a[]){
int i,u;
u=0;
for(i=0;a[i];i++){
if(!s[u][a[i]-'a'])
s[u][a[i]-'a']=rt++;
v[s[u][a[i]-'a']]++;
u=s[u][a[i]-'a'];
}
}
int get(char a[]){
int i,u;
u=0;
for(i=0;a[i];i++){
if(!s[u][a[i]-'a'])
return 0;
u=s[u][a[i]-'a'];
}
return v[u];
} //Trie树模板,主要就是在建树的时候
int main(){ //同时统计出每个前缀的数量
int n,m,i,j;
while(scanf("%d",&n)!=EOF){
memset(s,0,sizeof(s));
memset(v,0,sizeof(v));
rt=1;
for(i=1;i<=n;i++){
scanf("%s",a);
in(a);
}
scanf("%d",&m);
for(i=1;i<=m;i++){
scanf("%s",a);
printf("%d\n",get(a));
}
}
return 0;
}