原题
解析
很简单,设置了一个flag
让他在±1之间变化,然后利用list的push_back
和push_front
添加元素即可。
代码
#include <iostream>
#include <vector>
#include <list>
using namespace std;
struct stu{
string name;
int h;
};
bool myCmp(stu s1, stu s2){
if(s1.h==s2.h) return s1.name<s2.name;
else return s1.h>s2.h;
}
int main(){
int N,K;
cin>>N>>K;
stu s[N];
for(int i=0;i<N;i++){
cin>>s[i].name>>s[i].h;
}
sort(s,s+N,myCmp);
vector<list<stu> > v;
list<stu> line1;
int flag=1;
for(int i=0;i<N%K+N/K;i++){
if(flag==1){
line1.push_back(s[i]);
flag*=-1;
}
else{
line1.push_front(s[i]);
flag*=-1;
}
}
flag*=-1;
v.push_back(line1);
int cnt=N%K+N/K;
for(int i=1;i<K;i++){
list<stu> line_i;
flag=1;
for(int j=0;j<N/K;j++){
if(flag==1){
line_i.push_back(s[cnt]);
flag*=-1;
}
else{
line_i.push_front(s[cnt]);
flag*=-1;
}
cnt++;
}
v.push_back(line_i);
}
for(int i=0;i<K;i++){
while(v[i].size()>0){
cout<<v[i].front().name;
v[i].pop_front();
if(v[i].size()!=0) cout<<' ';
}
cout<<endl;
}
}