PTA --- 7-14 전화 채팅 미치광이 (25 점)

#INCLUDE <iostream> 
#INCLUDE < 문자열 > 
#INCLUDE <CString을>
 은 USING  스페이스 STD;
 INT   MAX_ = 0 ; // 카운트 증가, 이는이 시점에서 카운트 증가 최대 아니라고 판정 할 때마다, 현재의 최대 저장 MAX_ 
INT   F = 0 ; // 플래그 평행 어떤 광인 
INT N;
 INT   samecount = 0 ; // 야생의 수가 공동 
CHAR 결과 [ 20 ]; // 광인 전화 번호 

부호의 typedef    인덱스, 

인덱스 해시 ( CONST  숯불 * 키,   테이블 크기) // "데이터 구조와 알고리즘 분석 -C 언어 정보"해시 함수 
{ 
    부호   hashval = 0 ;
     그동안 (*는 (+ 키 4. !) = 0 )   // 왜 3 및 4~6 당신은 AC 할 수 있습니까? ? ? ? 
        = hashval (<< hashval 5. ) * + 키 ++; // (* 키 ++) 
     hashval % 테이블 크기; 
} 

구조체 num_node 
{ 
     NUM [ 100 ]
     INT COUNT;
     구조체 num_node * 다음; 
};

타입 정의 구조체 num_node * node_ptr 단계; 

node_ptr * CreateTable에서 ( INT의 사이즈) 
{ 
    node_ptr *는 H = 새로운 node_ptr [크기];
    위한 ( INT 난 = 0 ; I <크기; I ++ ) 
    { 
        H [I] = 새로운  구조체 num_node; 
        H [i]는 -> 카운트 = 0 ;
        만약 (! H [I] = NULL) 
            H [I] -> 다음 = NULL; 
    } 
    리턴 H 단계; 
} 

공극 인서트 ( node_ptr STR * * H) 
{ 
    INT 플래그 =에서는 0 ] // 이 수치 플래그 테이블에 이미 존재하는 경우 
    INT hashval 께 해시 = (STR, 2 * N); 
    S node_ptr = H [hashval를]
     그동안 (S-> 다음! NULL =) // 제 노드는 데이터를 저장하는 데 사용되지 않는다 
    { 
        S = S-> 다음으로,
         IF (STRCMP (STR, S->! ) NUM) 
        { 
            에서 플래그 = 1. , 
            S -> COUNT ++ ;
             IF (S-> COUNT > MAX_) // 마다 계수 변화 결정 수가 현재 최대 아니다
            { 
                strcpy를 (그 결과, (S) -> NUM); 
                MAX_ = S-> 카운트; 
            } 

            휴식 ; 
        } 
    } 
    경우 (플래그 == 0 ) 
    { 
        node_ptr 온도가 = 새로운 num_node 단계; 
        임시 -> 다음 = NULL; 
        strcpy를 (온도 -> NUM, STR); 
        임시 -> 카운트 = 1 ;
        경우 (temp-> 계수> MAX_) 
        { 
            의 strcpy (결과 TEMP > -  NUM);
            MAX_ = temp-> 카운트; 
        } 
        이야 -> 다음 = 임시; 
    } 
} 

공극 판사 (node_ptr * H)이 
{ 
    위한은 ( INT가 나는 = 0 ; I < 2 * N; I ++ ) 
    { 
        node_ptr S = H [I]; 

        동안 (S-> 다음! = NULL) 
        { 
            S = S-> 다음;
            경우 (MAX_ == S-> 카운트 및 STRCMP (결과, S-> NUM)! = 0 ) 
            { 
                F = 1; 
                samecount ++ ;
                경우 (STRCMP (S-> NUM, 결과) < 0 ) 
                { 
                    의 strcpy (결과,이야 -> NUM); 
                } 
            } 
        } 
    } 
} 
int 형 ) (주 
{ 
    CIN >> N; 
    node_ptr * CreateTable에서 H = ( 2 * N); 

    위한 ( INT 난 = 0 ; I <N을; I ++ ) 
    { 
         STR1 [ 20 ]; 
        CIN >> STR1, 
        INSERT (STR1, H), 
         STR2 [ 20이다 ] 
        CIN >> STR2, 
        INSERT (STR2, H) 
    } 
    판사 (H) // 더 최대 전제가없는 경우에 더 평행 얻을 분석 
    IF (F == 0 ) 
        COUT << 결과 << "  " << MAX_;
     다른  IF (F == . 1 ) 
        COUT << 결과 << "  " << MAX_ << "  " << samecount;
     복귀  0 ;
}

 

추천

출처www.cnblogs.com/2020R/p/PTA.html