问题
20分,测试点3、4未通过,有时间再来改。
写得太麻烦了,最后一排的输出和其他合在一起就可以了。
代码
#include<iostream>
#include<vector>
#include<string>
#include<utility>
#include<algorithm>
using namespace std;
bool cmp(pair<string,int> a,pair<string,int> b)
{
if (a.second == b.second)
return a.first < b.first;
return a.second > b.second;
}
int main()
{
int n,k;
cin >> n >> k;
vector<pair<string,int> > people(n);
for (int i=0; i<n; i++)
{
cin >> people[i].first;
cin >> people[i].second;
}
sort(people.begin(),people.end(),cmp);
int last = n-n/k*(k-1);//最后一排的人数
vector<string> name(last);
name[last/2] = people[0].first;
int i=1,j=1;
while(i<=last/2)
{
if (last/2-i>=0)
{
name[last/2-i] = people[j].first;
j++;
}
if (last/2+i<last)
{
name[last/2+i] = people[j].first;
j++;
}
i = i+1;
}
cout << name[0];
for (int m=1; m<last; m++)
cout << " " << name[m] ;
cout << endl;
name.clear();
vector<pair<string,int> >::iterator it = people.begin();
people.erase(it,it+last);
for (int m=1; m<=k-1; m++)
{
name.resize(k);
name[k/2] = people[0].first;
i=1;j=1;
while(i<=k/2)
{
if (k/2-i>=0)
{
name[k/2-i] = people[j].first;
j++;
}
if (k/2+i<k)
{
name[k/2+i] = people[j].first;
j++;
}
i = i+1;
}
cout << name[0];
for (int m=1; m<k; m++)
cout << " " << name[m] ;
cout << endl;
name.clear();
it = people.begin();
people.erase(it,it+k);
}
return 0;
}