PAT乙级|1055 集体照 (25 分)|20分未解决

 问题

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值