Estadísticas de prefijo (trie)

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;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44986601/article/details/105629281
Recomendado
Clasificación