这题答的不好...
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct person{
string name;
int height;
};
bool cmp(person* p1,person* p2){
if(p1->height!=p2->height){
return p1->height>p2->height;
}
return p1->name<p2->name;
}
int main() {
// std::cout << "Hello, World!" << std::endl;
int N,K;
cin>>N>>K;
int num=N/K;
person* persons[N];
for (int i = 0; i < N; ++i) {
auto* p=new person();
string string1;
cin>>string1>>p->height;
p->name=string1;
persons[i]=p;
}
sort(persons,persons+N,cmp);
vector<vector<person*>> res;
for (int i = 0; i < K; i++) {
int beg,end;
int num1;
if(i==0) {
beg = 0;
end = N - (K-1)*num-1;
num1 = end - beg + 1;
} else {
beg=N-(K-1)*num+(i-1)*num;
num1=num;
end=beg+num-1;
}
vector<person*> personArr;
personArr.resize(num1);
int index=(num1/2);
bool left=true;
int k=1;
personArr[index]=persons[beg];
for (int j =beg+1; j <=end ; ++j) {
auto per=persons[j];
if(left) {
if(index-k<0){
left=!left;
continue;
}
personArr[index-k] = per;
left= false;
} else{
if(index+k>=N){
left=!left;
continue;
}
personArr[index+k]=per;
left= true;
k++;
}
}
res.push_back(personArr);
}
for (auto & vector1 : res) {
cout<<vector1[0]->name;
for (int j = 1; j < vector1.size(); ++j) {
cout<<" "<<vector1[j]->name;
}
cout<<endl;
}
return 0;
}