题目详情 (pintia.cn)https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef struct student{
int ID, morality, ability;
} student;
bool cmp(student& a, student& b){
int suma = a.ability + a.morality;
int sumb = b.ability + b.morality;
if (suma != sumb) return suma >= sumb;
else if (suma == sumb && a.morality!=b.morality) return a.morality >= b.morality;
else return a.ID < b.ID;
}
int main(){
int n, l, h;
cin >> n >> l >> h;
vector<student> res1, res2, res3, res4;
for (int i=0; i<n; ++i){
int ID, morality, ability;
cin >> ID >> morality >> ability;
student* tmp = new student;
tmp->ID = ID; tmp->morality = morality; tmp->ability = ability;
if (morality < l || ability < l) continue;
else if (morality >= h && ability >= h) res1.push_back(*tmp);
else if (morality >= h && ability < h) res2.push_back(*tmp);
else if (morality >= ability) res3.push_back(*tmp);
else res4.push_back(*tmp);
}
sort(res1.begin(), res1.end(), cmp);
sort(res2.begin(), res2.end(), cmp);
sort(res3.begin(), res3.end(), cmp);
sort(res4.begin(), res4.end(), cmp);
cout << res1.size() + res2.size() + res3.size() + res4.size() << endl;
for (auto stu:res1) cout << stu.ID << ' ' << stu.morality << ' ' << stu.ability << endl;
for (auto stu:res2) cout << stu.ID << ' ' << stu.morality << ' ' << stu.ability << endl;
for (auto stu:res3) cout << stu.ID << ' ' << stu.morality << ' ' << stu.ability << endl;
for (auto stu:res4) cout << stu.ID << ' ' << stu.morality << ' ' << stu.ability << endl;
return 0;
}