赛时30分代码求不改变大体思路的情况下改
查看原帖
赛时30分代码求不改变大体思路的情况下改
1200191
封禁用户楼主2024/10/17 22:22
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
struct Student {
    int id;
    int gold, silver, bronze;
    bool operator<(const Student& other) const {
        if (gold != other.gold) return gold > other.gold;
        if (silver != other.silver) return silver > other.silver;
        return bronze > other.bronze;
    }
};

int main() {
    int n;
    cin >> n;

    vector<Student> students(n);
    for (int i = 0; i < n; ++i) {
        cin >> students[i].gold >> students[i].silver >> students[i].bronze;
        students[i].id = i;
    }

    vector<int> best_rank(n, n); 
  
    sort(students.begin(), students.end());
    for (int i = 0; i < n; ++i) {
        best_rank[students[i].id] = min(best_rank[students[i].id], i + 1);
    }

    sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
        if (a.silver != b.silver) return a.silver > b.silver;
        if (a.gold != b.gold) return a.gold > b.gold;
        return a.bronze > b.bronze;
    });
    for (int i = 0; i < n; ++i) {
        best_rank[students[i].id] = min(best_rank[students[i].id], i + 1);
    }

    sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
        if (a.bronze != b.bronze) return a.bronze > b.bronze;
        if (a.silver != b.silver) return a.silver > b.silver;
        return a.gold > b.gold;
    });
    for (int i = 0; i < n; ++i) {
        best_rank[students[i].id] = min(best_rank[students[i].id], i + 1);
    }

    for (int i = 0; i < n; ++i) {
        cout << best_rank[i] << endl;
    }

    return 0;
}
2024/10/17 22:22
加载中...