题目

解法1
点击查看代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Man {
string id;
int vg, tg;
int total;
int type; // 0: 圣人, 1: 君子, 2: 愚人, 3: 小人
};
bool cmp(const Man &m1, const Man &m2) {
if (m1.type != m2.type) return m1.type < m2.type; // 圣人优先
if (m1.total != m2.total) return m1.total > m2.total; // 同类别时,总分优先
if (m1.vg != m2.vg) return m1.vg > m2.vg; // 其次是品德优先
return m1.id < m2.id;
}
int main() {
int num, low, high;
cin >> num >> low >> high;
vector<Man> v;
for (int i = 0; i < num; i++) {
Man man;
cin >> man.id >> man.vg >> man.tg;
if (man.vg < low || man.tg < low) continue;
man.total = man.vg + man.tg;
if (man.vg >= high && man.tg >= high) {
man.type = 0; // 圣人
} else if (man.vg >= high && man.tg < high) {
man.type = 1; // 君子
} else if (man.vg < high && man.tg < high && man.vg >= man.tg) {
man.type = 2; // 愚人
} else {
man.type = 3; // 小人
}
v.push_back(man);
}
sort(v.begin(), v.end(), cmp);
cout << v.size() << endl;
for(int i =0;i<v.size();i++){
cout<<v[i].id<<" "<<v[i].vg<<" "<<v[i].tg;
if(i!=v.size()-1) cout<<endl;
}
return 0;
}
一些心得
1、这题是多条件排序,要读懂题意,谁先谁后
浙公网安备 33010602011771号