Estadísticas de prefijo
1010A Estadísticas de prefijo
Dadas N cadenas S1, S2 ... SN, luego se realizan M consultas, y a cada consulta se le asigna una cadena T, averigüe cuántas cadenas en S1 − SN son prefijos de T. La longitud total de la cadena de entrada no supera los 106 y contiene solo letras minúsculas.
Pregunta de plantilla de prueba, cambie la matriz bool final al insertarla en un contador
int n,m;
int trie[maxn][30],tot=1;
int en[maxn];
char sn[maxn];
void inser(char *s){
//trie插入
int ch,len=strlen(s),p=1;
for(int i=0;i<len;i++){
ch=s[i]-'a';
if(trie[p][ch]==0)trie[p][ch]=++tot;
p=trie[p][ch];
}
en[p]++;
}
int sear(char *s){
//检索字符串是否存在
int len=strlen(s),p=1,ch,sum=0;
for(int i=0;i<len;i++){
ch=s[i]-'a';
p=trie[p][s[i]-'a'];
if(p==0)break;
sum+=en[p];
}
return sum;
}
int main(){
sci(n);sci(m);
LL ans=0;
rep(i,1,n){
scanf("%s",sn);
inser(sn);
}
rep(i,1,m){
scanf("%s",sn);
cout<<sear(sn)<<endl;
}
return 0;
}