グループ写真PAT基本1055(25分)

形成は、所与の重要なグループの写真で撮影  N個人  設計行K待ち行列形成の規則に従って:

  • 各行の数  /(ダウン)、すべての余分な人々は、最後の行に立って、

  • 戻るすべての子前列の誰よりも短くありません。

  • 各中間ステーション(中央位置最高行  /、  行数mで、分割は切り捨て)。

  • 各行他の中間軸に、高さの非昇順、最初の左右交互にエンキュー起立仲介5の(例えば190,188,186,175,170高さ、形成175によれば、 。188190186170)これは、あなたがカメラマンに直面していると仮定し、その左手には、仲介の権利です。

  • 同じ高さ以上の場合は、辞書式昇順の名前を押してください。ここには名前が重複することを確実にするために。

今、人々の写真のセットが指定されると、プログラムの出力に彼らの形成を記述します。

入力フォーマット:

各入力は、テストを含みます。各テストケースは、最初の2つの正の整数の行が与えられる  N(≤、総数)と  K(≤、行の総数)。次いで、  N行は、各行は、高さ(スペース、これ以上8以下の文字の長さを含まない)、人の名前を与える([30、300]間隔の整数)。

出力フォーマット:

出力は、形成を撮影しました。それらの間のスペースで区切られ、そのK行の名前は、行の末尾には、余分なスペースを有していなくてもよいです。注意:あなたが写真家に直面した場合、誰がバック出力の最上部に、下部の最前列の出力。

サンプル入力:

10 3
Tom 188
Mike 170
Eva 168
Tim 160
Joe 190
Ann 168
Bob 175
Nick 186
Amy 160
John 159

出力例:

Bob Tom Joe Nick
Ann Mike Eva
Tim Amy John


アルゴリズムのアイデア:あらゆる種類の最初に、その後、いくつかの列の数行を計算するには、あなたはベクトルの最初のラインアップに、残りを見つけることができます。
次に、デックを使用してトラバースを交互に左右に挿入することができる挿入します。
#include <iostreamの> 
する#include <ベクトル> 
の#include <両端キュー> 
の#include <アルゴリズム>
 使用して 名前空間STDを、
構造体STU {
     文字列名。
    int型のlen;
}。
BOOL CMP(STUのS1、STUのS2){
     場合(s1.len = s2.len!)を返す s1.len> s2.len。
    返す s1.name < s2.name。
}
int型のmain(){
     int型のM、Nと、
    CIN >> M >> N。
    これは、[M]です。
    以下のためにint型私= 0 ;私はMを<;私は++ 
        CIN >> S [i]は.nameの>> S [i]の.LEN。
    ソート(S、S + M、CMP)は、
    INTの行= M / N。INTより= Mの%N。
    ベクトル <ベクトル<STU >> V; BOOL =開始int型のk = 0 もし(M < N){
        ベクトル <STU> TMP;
        int型 iは= 0 ; iがMを<I ++はtmp.push_back(S [I]))。
        v.push_back(TMP)。
    } {
         ながら(K < M){
            ベクトル <STU> TMP;
            もし{(開始)
                開始 = ;
                以下のためにint型 i = 0 ; iが<ROW +以上; iは++、K ++ )tmp.push_back(S [K])。
                v.push_back(TMP)。
            } {
                 ためint型 i = 0 ; iは、行<; I ++は、K ++ )tmp.push_back(S [K])。
                v.push_back(TMP)。
            }
        }
    }
    ベクトル <dequeの<STU >> RES。
    以下のためにint型 i = 0 ; i)は(v.sizeを<; iは++します){
        そして <概説> tmp_que。
        tmp_que.push_back(V [i]が[ 0 ])。ブール DIR = 0// 0是左插
        ためのint型 J = 1 ; jの<V [i]の.size(); J ++ ){
             場合(!DIR){
                tmp_que.push_front(V [I] [J])。
                あなた =!あなた;
            } {
                tmp_que.push_back(V [I] [J])。
                あなた =!あなた;
            }
        }
        res.push_back(tmp_que)。
    }

    以下のためにint型 i = 0 ; i)は(res.sizeを<; iは++ ){
         ためのint型 J = 0 ; J <RES [I] .size(); J ++ 場合!(J =のRES [I] .size( ) - 1)COUT << RES [I] [J] .nameの<< "  " 他の coutの<< RES [i]の[j]は.nameの<< てendl;
    }
    システム(一時停止)。
    リターン 0 ;
}

 

おすすめ

転載: www.cnblogs.com/littlepage/p/11701678.html