形成は、所与の重要なグループの写真で撮影 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 ; }