1 条题解

  • 1
    @ 2026-8-11 14:42:00
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    struct Player {
        int s, w, id;
    } a[200001], win[200001], lose[200001];
    
    bool cmd(Player x, Player y) {
        if (x.s != y.s) return x.s > y.s;
        return x.id < y.id;
    }
    
    int main() {
        int n, r, q;
        cin >> n >> r >> q;
        int original_n = n;
        n *= 2;
        
        for (int i = 1; i <= n; i++) {
            cin >> a[i].s;
            a[i].id = i;
        }
        for (int i = 1; i <= n; i++) cin >> a[i].w;
    
        sort(a + 1, a + n + 1, cmd);
        
        for (int i = 1; i <= r; i++) {
            int wcnt = 0, lcnt = 0;
    
            for (int j = 1; j <= n; j += 2) {
                if (a[j].w > a[j + 1].w) {
                    a[j].s++;
                    win[++wcnt] = a[j];
                    lose[++lcnt] = a[j + 1];
                } else {
                    a[j + 1].s++;
                    win[++wcnt] = a[j + 1];
                    lose[++lcnt] = a[j];
                }
            }
    
            int p = 1, q = 1, k = 1;
            while (p <= wcnt && q <= lcnt) {
                if (cmd(win[p], lose[q])) {
                    a[k++] = win[p++];
                } else {
                    a[k++] = lose[q++];
                }
            }
            while (p <= wcnt) a[k++] = win[p++];
            while (q <= lcnt) a[k++] = lose[q++];
        }
    
        cout << a[q].id << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    5428
    时间
    500ms
    内存
    125MiB
    难度
    5
    标签
    递交数
    8
    已通过
    2
    上传者