PAT_1062. Talent and Virtue

来源:互联网 发布:老调网新域名 编辑:程序博客网 时间:2024/05/29 13:26
////  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;}