只需一点需要注意,判断四种人中的一种不要放在输入循环里面(很耗时间)。。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct Record{
int id;
int talent;
int virtue;
Record(){}
Record(int id_, int talent_, int virtue_):
id(id_), talent(talent_), virtue(virtue_){}
};
bool cmp(Record a, Record b){
if(a.virtue + a.talent > b.virtue + b.talent)
return true;
else if(a.virtue + a.talent == b.virtue + b.talent){
if(a.virtue > b.virtue)
return true;
else if(a.virtue == b.virtue){
if(a.id > b.id)
return false;
else
return true;
}else{
return false;
}
}else{
return false;
}
}
int main(){
int N, L, H;
while(scanf("%d%d%d", &N, &L, &H) == 3){
vector<Record> sage, nobleman, foolman, smallman;
int id, virtue, talent;
vector<Record> person_(N);
for(int i = 0; i < N; ++i){
scanf("%d %d %d", &id, &talent, &virtue);
person_[i] = Record(id, virtue, talent);
}
for(int i = 0; i < N; ++i){
if(person_[i].virtue >= H){
if(person_[i].talent >= H)
sage.push_back(person_[i]);
else if(person_[i].talent >= L)
nobleman.push_back(person_[i]);
}else if(person_[i].virtue >= L){
if(person_[i].talent >= L){
if(person_[i].talent < H){
if(person_[i].virtue >= person_[i].talent)
foolman.push_back(person_[i]);
else
smallman.push_back(person_[i]);
}else{
smallman.push_back(person_[i]);
}
}
}
}
sort(sage.begin(), sage.end(), cmp);
sort(nobleman.begin(), nobleman.end(), cmp);
sort(foolman.begin(), foolman.end(), cmp);
sort(smallman.begin(), smallman.end(), cmp);
vector<Record> person(0);
person.insert(person.end(), sage.begin(), sage.end());
person.insert(person.end(), nobleman.begin(), nobleman.end());
person.insert(person.end(), foolman.begin(), foolman.end());
person.insert(person.end(), smallman.begin(), smallman.end());
printf("%d\n", person.size());
for(int i = 0; i < (int)person.size(); ++i){
printf("%d %d %d\n", person[i].id, person[i].virtue, person[i].talent);
}
}
return 0;
}