感觉自己做的挺麻烦的,将最后一排与前面几排分开来讨论,估计看代码的人会有点吃力。
struct Stu{
string name;
int hei;
}stu[10010];
int que[10010];
int n, k;
bool cmp(Stu a, Stu b){
if(a.hei == b.hei) return a.name < b.name;
return a.hei > b.hei;
}
int main(){
cin>>n>>k;
for(int i = 0; i<n; i++){
cin>>stu[i].name;
cin>>stu[i].hei;
}
int num = round(n/k);
sort(stu, stu+n, cmp);
int m = n - num*(k-1);
for(int i = 0; i< m; i++){
int temp;
if(i%2 == 0) temp = i/2;
else temp = -i/2-1;
que[m/2+1+temp-1] = i;
}
for(int j = 0; j<m; j++){
cout<<stu[que[j]].name;
if(j != m-1) cout<<" ";
}
cout<<endl;
for(int i = 0; i<k-1; i++){
for(int j = 0; j<num; j++){
int temp;
if(j%2 == 0) temp = j/2;
else temp = -j/2-1;
//cout<<m+i*num+j;
que[num/2+1+temp-1] = m+i*num+j;
}
for(int j = 0; j<num; j++){
cout<<stu[que[j]].name;
if(j != num-1) cout<<" ";
}
cout<<endl;
}
return 0;
}