只需一点需要注意,判断四种人中的一种不要放在输入循环里面(很耗时间)。。
#include
#include
#include
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
sage, nobleman, foolman, smallman; int id, virtue, talent; vector
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
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; }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178773.html原文链接:https://javaforall.net
