(템플릿) hdoj1251 (트라이 템플릿 제목)

주제 링크 : HTTPS : //vjudge.net/problem/HDU-1251

질문의 의미하는 것은 : 문자열의 주어진 숫자 후, 고정 접두사 일련의 각 접두사에 대한 접두사로 문자열 쿼리 문자열의 수를 제공합니다.

아이디어 :

  나는 항목 제목을 시작으로 오늘 사전 트리를 배우기 시작했다. 배열을 달성하기 위해, 카운트 배열은 루트 노드와 각각의 노드, 트라이 [0]의 발생 회수를 나타낸다.

AC 코드 :

#INCLUDE <cstdio> 
#INCLUDE <알고리즘> 
#INCLUDE <CString을>
 은 USING  스페이스 STD; 

CONST  INT MAXN = 1E6 + 5. ;    // 트리 크기 최대한 비트 업 
INT 트리는 [MAXN] 30 [MAXN], NUM, CNT,
  STR [ 15 ] 

보이드 INSERT (  * S) {
     INT LEN = strlen 함수 (S)
     INT U = 0 ;
      ( INT I = 0 ; I <LEN; ++ I) {
         INT T = S [ I] - '' ;
        만약 (! {트라이 [U] [t])
             ++ CNT; 
            memset 함수 (트라이 [CNT] 0 , 는 sizeof (트라이 [CNT])); 
            트라이 [U] [t] = CNT; 
        } 
        U = 트라이 [U] [t];
        ++ NUM [U]; 
    } 
} 

INT의 쿼리 (  * S) {
     INT LEN = strlen 함수 (S);
    int로 유 = 0 ;
    위한 ( INT 난 = 0 ; i가 <LEN ++ {I)
         지능t = S [I] - ' ' ;
        경우 (트라이 [U] [t]!) 복귀 0 ; 
        U = 트라이 [U] [t]; 
    } 리턴 NUM [U]; 
} int로 () {메인 
    CNT = 0 ; 
    memset 함수 (트라이 [ 0 , 0 , 는 sizeof (트라이 [ 0 ])); 
    memset 함수 (NUM, 0 , 는 sizeof (NUM));
    동안 (이 (STR), STR 얻는다 [ 0 ]! = ' \ 0 ' ) 
        를 삽입 (STR); 동안 
    


    (~는 scanf ( " % S " , STR)) 
        의 printf ( " 가 % d \ n " , 질의 (STR));
    반환  0 ; 
}

 

추천

출처www.cnblogs.com/FrankChen831X/p/11829364.html