無限の光を放つのは人間の心であり、無限の闇を生み出すのも人間の心であり、光と闇が絡み合って戦うこの世界は、懐かしくて無力な世界です。
集合写真を撮るとき、形成は非常に重要です。次のように、N人でK行を形成するルールを考えます。
-
各行の人数はN / K(最も近い整数に切り捨て)である必要があり、追加の人物(存在する場合)はすべて最後の行にいます。
-
後列のすべての人は、前列に立っている誰よりも短くてはなりません。
-
各行で、最も高いものは中央の位置(位置(m / 2 + 1)として定義されます)に立っています。ここで、mはその行の合計人数です。除算結果は、最も近い整数);
-
各行で、他の人は高さの昇順で行に入る必要があり、最も高いものの最初に右に、次に左に位置を取ります(たとえば、身長190、188の5人の場合、 186、175、および170の場合、最終的な編成は175、188、190、186、および170になります。ここでは、グループが正面を向いていると想定しているため、左側が中央にあるグループの右側になります。ポジション。);
-
同じ高さの人が多い場合は、名前をアルファベット順(昇順)に並べる必要があり、名前の重複がないことが保証されています。
人々のグループの情報が与えられたら、あなたは彼らのフォーメーションを出力するプログラムを書くことになっています。
入力仕様:
各入力ファイルには1つのテストケースが含まれています。各テストケースの最初の行には、2人の正の整数N(≤104)、合計人数、およびK(≤10)、合計行数が含まれています。次に、N行が続き、それぞれが人の名前(スペースを含まない8文字以下の英字)とその人の身長([30、300]の整数)を示します。
出力仕様:
ケースごとに、フォーメーションを印刷します。つまり、K行で人の名前を印刷します。名前は1つのスペースで区切る必要がありますが、各行の終わりに余分なスペースがあってはなりません。注:グループに面しているため、後列の人は前列の人の上に印刷する必要があります。
入力例:
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 <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX
//#include<bits/stdc++.h>
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
#define PI 3.1415926
typedef long long ll;
using namespace std;
int const mod=1e9+7;
const int maxn=1000100;
int n, k;
struct node {
string name;
int h;
} P[10010];
bool cmp(node a, node b) {
if (a.h==b.h)
return a.name<b.name;
else
return a.h>b.h;
}
int main() {
cin>>n>>k;
for (int i=0; i<n; i++)
cin>>P[i].name>>P[i].h;
sort(P, P+n, cmp);
int ct=k,m,t=0;
while(ct){
if (ct==k)
m=n-(n/k)*(k-1);
else
m=n/k;
vector<node> jg(m);
jg[m/2]=P[t];
int j=m/2-1;
for (int i=t+1; i<t+m; i+=2)
jg[j--]=P[i];
j=m/2+1;
for(int i=t+2; i<t+m; i+=2)
jg[j++] = P[i];
cout<<jg[0].name;
for (int i=1; i<m; i++)
cout<<" "<<jg[i].name;
cout<<endl;
t+=m;
ct--;
}
return 0;
}