1 条题解

  • 0
    @ 2026-7-28 14:49:56

    三轮积分赛 题解

    思路

    在结构体中额外保存 totalbest,读入时同步计算。排序时必须严格按照“总分、单轮最高分、编号”三个关键字依次比较。

    参考代码

    #include <bits/stdc++.h>
    using namespace std;
    
    struct Player {
        int id;
        string name;
        int score[3];
        int total;
        int best;
    };
    
    bool cmp(const Player &a, const Player &b) {
        if (a.total != b.total) return a.total > b.total;
        if (a.best != b.best) return a.best > b.best;
        return a.id < b.id;
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        int n, k;
        cin >> n >> k;
        vector<Player> a(n);
    
        for (auto &p : a) {
            cin >> p.id >> p.name;
            p.total = 0;
            p.best = 0;
            for (int i = 0; i < 3; ++i) {
                cin >> p.score[i];
                p.total += p.score[i];
                p.best = max(p.best, p.score[i]);
            }
        }
    
        sort(a.begin(), a.end(), cmp);
    
        for (int i = 0; i < k; ++i) {
            cout << i + 1 << ' ' << a[i].id << ' ' << a[i].name << ' '
                 << a[i].total << ' ' << a[i].best << '\n';
        }
        return 0;
    }
    
    • 1

    信息

    ID
    5087
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    1
    已通过
    1
    上传者