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;
}

posted @ 2020-09-26 21:48  韩天尊  阅读(81)  评论(0)    收藏  举报