题目


解法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、这题是多条件排序,要读懂题意,谁先谁后