形成は、所与の重要なグループの写真で撮影 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
この問題は複雑で、実際には、明確な思考や問題なしで、非常に簡単に見のようですが、Baiduのビットと柳神コード、礼拝の.GIFを見つけた.....
元動的配列が書き込まれ
たコードを貼り付けます
書式#include <iostreamの> の#include <アルゴリズム> 書式#include <ベクトル> 使用して 名前空間はstdを、 構造体ノード{ 文字列名。 int型の高さ。 }。 int型 CMP(構造体のノードA、構造体のノードb){ 返す a.heightを!= b.height?a.height> b.height:a.name < b.name。 } int型のmain(){ int型N、K、M。 CIN >> N >> K。 ベクター <ノード> STU(N)。 以下のための(int型 I = 0; 私は、n <; I ++ ){ CIN >> STU [I] .nameの>> STU [I] .height。 } ソート(stu.begin()、stu.end()、CMP)。 INT、T = 0、行= K。 一方、(行){ 場合(行== k)は 、M = N - 、N / K×(K - 1 )。 そうでなければ 、M = N / K。 ベクター < ストリング > ANS(M)。 ANS [M / 2 ] = STU [T] .nameの。 // 左边一列 int型 J = M / 2- 1 ; 以下のために(int型 iは、T + = 1 ; I <T + M; I = I + 2 ) ANS [J - ] = STU [I] .nameの。 // 右边一列 J = M / 2 + 1 。 以下のために(int型 iは、T + = 2 ; I <T + M; I = I + 2 ) ANS [J ++] = STU [I] .nameの。 // 输出当前排 COUT << ANS [ 0 ]。 以下のために(int型私= 1 ; iが<M、I ++) COUT << " " << ANS [I]、 COUT << ENDL; T = T + M; ロウ - ; } 戻り 0 ; } ----------------- ---- 著者:劉諾 ソース:CSDNの 元:HTTPS:// blog.csdn.net/liuchuo/article/details/51994263 著作権:この記事はブロガーオリジナル記事ですが、再現し、ボーエンのリンクを添付してください!