题目描述
知识点: 模拟
思路: 按照题目意思进行模拟 可以利用1 -1这样的形式进行跳跃式的填充。然后用数组进行输出。
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e4*10;
string row[N];
struct Person{
string name;
int height;
bool operator < (const Person p) const{
if(height != p.height) return height > p.height;
return name < p.name;
}
}p[N];
int n,k;
void group(int s,int e){
int num = e - s + 1;
int cur = s+1;
row[num/2+1] = p[s].name;
int center = num/2+1;
for(int i = 1;;i++){
if(cur > e) break;
int left = -i + center;
row[left] = p[cur++].name;
if(cur > e) break;
int right = i + center;
row[right] = p[cur++].name;
}
for(int i = 1;i <= num;i++)
{
if(i != num)
cout<<row[i]<<" ";
else cout<<row[i];
}
cout<<endl;
}
int main(){
cin>>n>>k;
for(int i = 0; i< n;i++) cin>>p[i].name>>p[i].height;
sort(p,p+n);
int m = n / k;
for(int i = 0;i < n;){
if(i == 0)
{
group(i,i + m + (n % m)-1);
i = i + m + (n % m);
}
else{
group(i,i + m - 1);
i = i + m;
}
//cout<<i<<endl;
}
return 0;
}