#include <iostreamの> する#include < ストリング > の#include <CStringの> 使用して 名前空間STD; INT MAX_ = 0 ; // カウントが増加すると、この時点でカウント増加が最大でないと判断されるたびに、現在の最大値を記憶されMAX_ int型 F = 0 ; // フラグが何を並列狂人 int型N; int型 samecount = 0 ; // 野生の数のために結ば CHAR結果[ 20 ]; // 狂人電話番号 符号なしのtypedef ロング ロング インデックス、 インデックスのハッシュ(のconst のchar *キー、長い 長い tableSize)// "データ構造とアルゴリズム解析-C言語の説明"ハッシュ関数 { 符号なしの長い ロング hashval = 0 ; ながら(*(+キー4。 !)= 0) // 6なぜ3,4あなたはACことができますか???? = hashval(<< hashval 5。)* +キー++; // *(キー++) リターン hashval%tableSize; } 構造体num_node { チャー NUM [ 100 ]; int型COUNT; 構造体 num_node * 次に; }; typedefは構造体 * num_node node_ptr。 node_ptr *のCreateTable(int型のサイズ) { node_ptr * H = 新しいnode_ptr [サイズ]。 以下のために(INT iが= 0 ; I <サイズ; I ++ ) { H [I] = 新しい 構造体num_node。 H [I] - >カウント= 0 ; もし(!H [i]を= NULL) H [I] - >次= NULL; } 戻りHを、 } ボイドインサート(CHARnode_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 TEMP = 新しいnum_node。 TEMP - >次= NULL; strcpyの(温度 - > NUM、STR)。 TEMP - >回数= 1 ; もし(temp->カウント> MAX_) { strcpyの(その結果、温度 - > NUM)。 MAX_ = temp-> 数えます。 } だ - >次= TEMP。 } } ボイド裁判官(node_ptr * H) { ため(intは iは= 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 ) { (その結果、S strcpyの - > ; NUM) } } } } } int型のmain() { CIN >> N。 node_ptr * H =のCreateTable(2 * N)。 用(INT iは= 0 ; I <N I ++ ) { チャー 0009 [ 20 ]。 CIN >> 0009; INSERT(STR1、H); CHAR STR2 [ 20である]; CIN >> STR2; INSERT(STR2、H); } ジャッジ(H); //はない最大前提が存在しない場合に、より長い平行を得ます分析 IF(F == 0 ) COUT <<結果<< " " << MAX_; 他の IF(F == 1 ) COUT <<結果<< " " << MAX_ << " " << samecount; リターン 0 ; }