30求调
查看原帖
30求调
1031647
IeoA楼主2024/6/12 18:57
#include <bits/stdc++.h>
using namespace std;

struct Student {
    bool equal;
    int id, rank;
    int chinese, maths, english;
    int sum1, sum2, maxn;
    void work () {
        sum1 = chinese + maths + english;
        sum2 = chinese + maths;
        maxn = max(chinese, maths);
    }
};

int n;
Student arr[100005];

bool cmp (Student &a, Student &b) {
    if (a.sum1 != b.sum1) {
        return a.sum1 > b.sum1;
    } else if (a.sum2 != b.sum2) {
        return a.sum2 > b.sum2;
    } else if (a.maxn != b.maxn) {
        return a.maxn > b.maxn;
    }
    a.equal = true;
    b.equal = true;
    return 1;
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> arr[i].chinese >> arr[i].maths >> arr[i].english;
        arr[i].work();
        arr[i].id = i;
    }
    sort(arr + 1, arr + 1 + n, cmp);
    for (int i = 1; i <= n; i++) {
        if (arr[i].equal && arr[i - 1].equal) {
            arr[i].rank = arr[i - 1].rank;
        } else {
            arr[i].rank = i;
        }
    }
    sort(arr + 1, arr + 1 + n, [](Student a, Student b) {
        return a.id < b.id;
    });
    for (int i = 1; i <= n; i++) {
        cout << arr[i].rank << endl;
    }
    return 0;
}

2024/6/12 18:57
加载中...