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