PTA --- 7-14電話チャットの狂人(25ポイント)

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

 

おすすめ

転載: www.cnblogs.com/2020R/p/PTA.html