접두사

접두사

난창 (南昌) 초청 제목, 사전 트리

#INCLUDE <비트 / stdc ++ H.>
 사용  스페이스 성병; 
타입 정의  LL; 
LL A [ 26 ];
문자열 S [ 100005 ]; 
LL의 트라이 [ 200,008 ] [ 26 ]; 
LL의 V [ 200,005 ]; 
LL 더하다 = 1 ; 
LL의 CNT [ 200,005 ]; 
LL의 B [ 100005 ]; 
게요 N, 모드; 
보이드 인서트 ( 스트링 (S) 의 INT (X)) 
{ 
    INT의 p = 1 ;
    INT LEN =s.length (); 
    LL의 t = 1 ;
    위한 ( int로 I = 0 ; I <렌; 내가 ++ ) { 
        t = (t에서의 * A [S [I] - ' ' ]) % 개조;
        경우 (트라이 [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 <렌; 내가 ++ ) { 
        P = 트라이 [P] [S [I] - ' ' ];
        경우 (V [P]> B [X]) { 
            ANS + = CNT [P]; 
        } 
    } 
} INT 주 () 
{ 
    scanf와을 ( "

     %의 LLD의 %의 LLD " , N, 개조);
    위한 ( int로 I = 0 ; I <는 26 나 ++; {) 
        는 scanf ( " %의 LLD를 " , A [I]); 
    } 
    에 대해 ( int로 I = 0 ; I <N은, 내가 ++ ) { 
        CIN >> S [I]; 
        (S [i]는 i)를 삽입; 
    } 
    에 대해 ( int로 I = 0 ; I <N은, 내가 ++ ) { 
        검색 (S [i]를, I); 
        COUT << ANS << '  ' ;0 ; 
    } 
    
    
}

 

추천

출처www.cnblogs.com/liulex/p/11274041.html