PAT_1062. Talent and Virtue

//
//  main.cpp
//  PAT_1062. Talent and Virtue
//
//  Created by wjq on 17/5/18.
//  Copyright © 2017年 wjq. All rights reserved.
//


#include <iostream>
#include <algorithm>
using namespace std;
struct person
{
    int name;
    int talent,virtue;
}sages[100005],noblemen[100005],foolmen[100005],smallmen[10005];
int sagesID=0,nobleID=0,foolID=0,smallID=0;
int N,L,H,numofperson;
int cmp(person a,person b)
{
    if(a.talent+a.virtue==b.talent+b.virtue)
    {
        if(a.virtue==b.virtue)
            return a.name<b.name;
        return a.virtue>b.virtue;
    }
    return a.talent+a.virtue>b.talent+b.virtue;
}
int main(int argc, const char * argv[]) {
    scanf("%d%d%d",&N,&L,&H);
    numofperson=N;
    int n,t,v;
    for(int i=0;i<N;i++)
    {
        scanf("%d%d%d",&n,&v,&t);
        if(t<L||v<L)
        {
            numofperson--;
            continue;
        }
        if(t>=H&&v>=H)
        {
            sages[sagesID].name=n;
            sages[sagesID].talent=t;
            sages[sagesID].virtue=v;
            sagesID++;
        }
        else if(t<H&&v>=H)
        {
            noblemen[nobleID].name=n;
            noblemen[nobleID].talent=t;
            noblemen[nobleID].virtue=v;
            nobleID++;
        }
        else if(t<H&&v<H&&v>=t)
        {
            foolmen[foolID].name=n;
            foolmen[foolID].talent=t;
            foolmen[foolID].virtue=v;
            foolID++;
        }
        else
        {
            smallmen[smallID].name=n;
            smallmen[smallID].talent=t;
            smallmen[smallID].virtue=v;
            smallID++;
        }
    }
    sort(sages,sages+sagesID,cmp);
    sort(noblemen,noblemen+nobleID,cmp);
    sort(foolmen,foolmen+foolID,cmp);
    sort(smallmen,smallmen+smallID,cmp);
    cout<<numofperson<<endl;
    for(int i=0;i<sagesID;i++)
        cout<<sages[i].name<<" "<<sages[i].virtue<<" "<<sages[i].talent<<endl;
    for(int i=0;i<nobleID;i++)
        cout<<noblemen[i].name<<" "<<noblemen[i].virtue<<" "<<noblemen[i].talent<<endl;
    for(int i=0;i<foolID;i++)
        cout<<foolmen[i].name<<" "<<foolmen[i].virtue<<" "<<foolmen[i].talent<<endl;
    for(int i=0;i<smallID;i++)
        cout<<smallmen[i].name<<" "<<smallmen[i].virtue<<" "<<smallmen[i].talent<<endl;
    return 0;
}


两个case超时,重写一份代码.

//
//  main.cpp
//  PAT_1062. Talent and Virtue
//
//  Created by wjq on 17/5/18.
//  Copyright © 2017年 wjq. All rights reserved.
//


#include <iostream>
#include <algorithm>
using namespace std;
struct person
{
    int name,talent,virtue;
}p[100005];
int N,L,H,numofperson,pid=0;
int cmp(person a,person b)
{
    if(a.talent+a.virtue==b.talent+b.virtue)
    {
        if(a.virtue==b.virtue)
            return a.name<b.name;
        return a.virtue>b.virtue;
    }
    return a.talent+a.virtue>b.talent+b.virtue;
}
int main(int argc, const char * argv[]) {
    scanf("%d%d%d",&N,&L,&H);
    numofperson=N;
    int n,t,v;
    for(int i=0;i<N;i++)
    {
        scanf("%d%d%d",&n,&v,&t);
        if(t<L||v<L)
        {
            numofperson--;
            continue;
        }
        else
        {
            p[pid].name=n;
            p[pid].virtue=v;
            p[pid].talent=t;
            pid++;
        }
    }
    sort(p,p+pid,cmp);
    cout<<numofperson<<endl;
    for(int i=0;i<pid;i++)
        if(p[i].virtue>=H&&p[i].talent>=H)
            cout<<p[i].name<<" "<<p[i].virtue<<" "<<p[i].talent<<endl;
    for(int i=0;i<pid;i++)
        if(p[i].virtue>=H&&p[i].talent<H)
            cout<<p[i].name<<" "<<p[i].virtue<<" "<<p[i].talent<<endl;
    for(int i=0;i<pid;i++)
        if(p[i].virtue<H&&p[i].talent<H&&p[i].virtue>=p[i].talent)
            cout<<p[i].name<<" "<<p[i].virtue<<" "<<p[i].talent<<endl;
    for(int i=0;i<pid;i++)
        if(p[i].virtue<H&&p[i].virtue<p[i].talent)
            cout<<p[i].name<<" "<<p[i].virtue<<" "<<p[i].talent<<endl;
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值