接頭辞

接頭辞

南昌インビテーショナルのタイトル、辞書ツリー

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
typedefの長い 長いLL。
LL [ 26 ]。
ストリング S [ 100005 ]。
LLトライ[ 200008 ] [ 26 ]。
LLのV [ 200005 ]。
LL TOT = 1 
LLのCNT [ 200005 ]。
LLのB [ 100005 ]。
LL N、MOD。
ボイドインサート(ストリング S、INT X)
{ 
    int型、P = 1 int型のlen =s.length(); 
    LL T = 1 以下のためにint型 i = 0 ; iがLEN <; iは++ ){ 
        T =(T *とのA [S [I] - [ A ' ])%MOD。
        もし(トライ[P] [S [i]は- ' ' ] == 0 ){ 
            トライ[P] [S [I] - ' ' ] = ++ TOT。
        } 
        P =トライ[P] [S [I] - ' ' ]。
        CNT [P] ++ ; 
        V [P]は = Tと、
    }
    B [X]= T。
} 
LL ANS = 0 ボイド検索(ストリング S、INT X)
{ 
    int型、P = 1 INT LEN = s.length()。
    以下のためにint型 i = 0 ; iがLEN <; iは++ ){ 
        P =トライ[P] [S [I] - ' ' ]。
        もし(V [P]> B [X]){ 
            ANS + = CNT [P]。
        } 
    } 
} int型のmain()
{ 
    scanf関数(

    " %の%のLLD LLD "、&​​N、&MOD)。
    以下のためにint型私= 0 ; iが< 26 ; iが++ ){ 
        scanf関数(" %のLLD "、&A [I])。
    } 
    のためにint型 i = 0 ; iがn <; iは++ ){ 
        CIN >> S [i]は、
        (S [i]は、I)を挿入します。
    } 
    のためにint型 i = 0 ; iがn <; iは++ ){ 
        検索(S [i]は、I)。
        coutの << ANS << '  ' ;0 ; 
    } 
    
    
}

 

おすすめ

転載: www.cnblogs.com/liulex/p/11274041.html