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