逻辑上还有不清晰的地方
思维还是不够
题目其实很简单,自己想的太复杂
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <unordered_map>
#include <cstring>
using namespace std;
int n,k,m;
struct student{
string name;
int height;
};
vector<student> stu;
bool cmp(student a, student b){
if(a.height == b.height) return a.name < b.name;
else return a.height > b.height;
}
int main()
{
cin >> n >> k;
stu.resize(n);
for(int i=0; i<n; i++){
string a;
int b;
cin >> a >> b;
stu[i].name = a;
stu[i].height = b;
}
sort(stu.begin(),stu.end(),cmp);
int row = k;
int t = 0;
while(row){
if(row==k) m = n - n/k*(k-1);
else m = n / k;
vector<string> ans(m);
ans[m/2] = stu[t].name;
int k = 1;
for(int i=m/2-1; i>=0; i--){
ans[i] = stu[t+k].name;
k = k + 2;
}
k = 2;
for(int i=m/2+1; i<m; i++){
ans[i] = stu[t+k].name;
k = k + 2;
}
for(int i=0; i<m; i++){
if(i==0) cout << ans[i];
else cout << " " << ans[i];
}
cout << endl;
t += m;
ans.clear();
row--;
}
return 0;
}