题意:输入N,K,N代表N个人,K代表排成K行,输入一些人的名字和身高,每行按照中间最高,先左后右两边依次非增。
思路:普通模拟。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAX_N = 10010;
struct Data {
string s;
int d;
}p[MAX_N];
int N, K;
string tmp[MAX_N];
bool cmp(Data d1, Data d2) {
return d1.d > d2.d || (d1.d == d2.d && d1.s < d2.s);
}
int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
cin >> N >> K;
for (int i = 0; i < N; i++) {
cin >> p[i].s >> p[i].d;
}
sort(p, p+N, cmp);
int pt = 0;
while(K) {
int t = (N / K) + (N % K > 0);
int tp = -1;
tp = t / 2 + 1;
int tep = -1;
tmp[tp] = p[pt].s;
for (int j = 1; j < t; j++) {
tmp[tp+tep] = p[pt+j].s;
if (tep < 0) tep = -tep;
else {tep = -tep; tep--;}
}
for (int j = 1; j <= t; j++) {
if (j > 1) cout << " ";
cout << tmp[j];
if (j == t) cout << endl;
}
N -= t; K--;
pt += t;
}
return 0;
}