PAT(Basic Level) Practice : 1055 集体照 (25分)
1055 集体照 (25分)
string中的compare()
string自带的compare可以按照字典序来比较大小,返回值与0比较大小
str1.compare(str2)
//str1小于str2,返回负数
//str1等于str2,返回0
//str1大于str2,返回正数
//return str1.compare(str2)>0
代码
#include <iostream>
#include <vector>
#include <string>
#include <cstdio>
//scanf printf防止超时
#include <algorithm>
//vector的sort
#include <sstream>
//转换
using namespace std;
#include<iomanip>
//精度
#include<cmath>
//round四舍五入取整
class people
{
public:
string name;
int height;
people()
{
name="J";
height=0;
}
};
bool compare(people p1,people p2)
{
if(p1.height==p2.height)
{
return p2.name.compare(p1.name)>0;
}else
return p1.height>p2.height;
}
int main()
{
int num;
cin>>num;
int K;
cin>>K;
int m=num/K;
vector<people> peos;
for(int i=0;i<num;i++)
{
string name;
int height;
cin>>name>>height;
people temp;
temp.name=name;
temp.height=height;
peos.push_back(temp);
}
sort(peos.begin(),peos.end(),compare);
/*
for(int i=0;i<num;i++)
{
cout<<peos[i].name<<" "<<peos[i].height<<endl;
}*/
int len=m+num%K;
int index=0;
if(num%K!=0)
{
vector<people> temp;
for(int i=0;i<len;i++)
{
people t;
temp.push_back(t);
}
temp[len/2]=peos[index++];
for(int i=1;i<=len/2;i++)
{
temp[len/2-i]=peos[index++];
if(len/2+i<temp.size())
{
temp[len/2+i]=peos[index++];
}
}
for(int i=0;i<temp.size();i++)
{
cout<<temp[i].name;
if(i!=temp.size()-1)
cout<<" ";
else
cout<<endl;
}
K--;
}
for(int i=0;i<K;i++)
{
vector<people> temp;
for(int i=0;i<m;i++)
{
people t;
temp.push_back(t);
}
temp[m/2]=peos[index++];
for(int i=1;i<=m/2;i++)
{
temp[m/2-i]=peos[index++];
if(m/2+i<temp.size())
{
temp[m/2+i]=peos[index++];
}
}
for(int i=0;i<temp.size();i++)
{
cout<<temp[i].name;
if(i!=temp.size()-1)
cout<<" ";
else
cout<<endl;
}
}
return 0;
}