臭长臭长的代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<iomanip>
using namespace std;
const int maxn = 10010;
int n;
struct stu
{
char name[10];
int h;
}s[maxn],ans[12][maxn];
bool cmp1(stu a, stu b) {
if(a.h!=b.h) return a.h > b.h;
else return strcmp(a.name, b.name) < 0;
}
int main() {
int k;
cin >> n >> k;
int rk = k;
for (int i = 0; i < n; i++)
{
cin >> s[i].name >> s[i].h;
}
sort(s, s + n, cmp1);
int p = 0;
int fx = 0;
for (int i = 1; i <= k; i++)
{
if (i == 1)
{ int mid = (n - (n / k )*(k-1)) / 2 + 1;
int l = mid, r = mid;
for (int j = 1; j <= n - (n / k )*(k-1); j++)
{
if (ans[i][mid].h==0)
{
ans[i][mid] = s[p++];
}
else if (fx == 0) {
ans[i][--l] = s[p++];
fx = 1;
}
else {
ans[i][++r] = s[p++];
fx = 0;
}
}
}
else {
fx = 0;
int mid = n/k / 2 + 1;
int l = mid, r = mid;
for (int j = 1; j <= n/k; j++)
{
if (ans[i][mid].h == 0)
{
ans[i][mid] = s[p++];
}
else if (fx == 0) {
ans[i][--l] = s[p++];
fx = 1;
}
else {
ans[i][++r] = s[p++];
fx = 0;
}
}
}
}
for (int i = 1; i <= k; i++)
{
if (i == 1)
{
for (int j = 1; j <= n - (n / k )*(k-1); j++)
{
cout << ans[1][j].name;
if (j== n - (n / k )*(k-1))
{
cout << endl;
}
else cout << ' ';
}
}
else {
for (int j = 1; j <= n/k; j++)
{
cout<<ans[i][j].name;
if (j == n/k)
{
cout << endl;
}
else cout << ' ';
}
}
}
return 0;
}