AcWing 1599. 合影
原题链接
中等
作者:
leo123456
,
2020-08-31 17:00:11
,
所有人可见
,
阅读 406
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=10010;
int n,m;
struct Person
{
string name;
int h;
}p[N];
bool cmp(Person a,Person b)
{
if(a.h!=b.h) return a.h>b.h;
else return a.name<b.name;
}
string line[N]; //把每一行记录下来
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i ++ ) cin >> p[i].name >> p[i].h;
sort(p, p + n,cmp);
for (int i = 0, j = 0; i < m; i ++ ) //m排 ,i循环每排,j从前往后枚举每一个人
{
int len = n / m; //普通排人数
if (!i) len += n % m; // 特判最后一排 多余的人加入最后一排
for (int r = len / 2 + 1, l = r - 1; l > 0 || r <= len; l --, r ++ ) //,每排第一个人len/2+1 ,l中间的人左边一个,r,l分别往两边走
{
if (r <= len) line[r] = p[j ++ ].name;
if (l > 0) line[l] = p[j ++ ].name;
}
cout << line[1]; //行末不能有空格
for (int k = 2; k <= len; k ++ ) cout << ' ' << line[k];
cout << endl;
}
return 0;
}