大佬求调,差一个过
查看原帖
大佬求调,差一个过
991256
yunqingmo楼主2023/11/18 23:02

爸爸们,大佬们,看看有哪儿有问题,有一个过不了,显示答案错误,谢谢

#include <iostream>
#include <algorithm>

using namespace std;

int n, r, q;
int s[200010], w[200010];
int id[200010], win[200010], lose[200010];
int sw, sl;

bool cmp(int x, int y) {
    if (s[x] == s[y]) 
        return x < y;
    return s[x] > s[y];
}

void merge() {
    int i = 1, j = 1, k = 1;
    while (i <= sw && j <= sl) {
        if (cmp(win[i], lose[j]))
            id[k++] = win[i++];
        else
            id[k++] = lose[j++];
    }
    while (i <= sw)
        id[k++] = win[i++];
    while (j <= sl)
        id[k++] = lose[j++];
}


int main() {
    cin >> n >> r >> q;
    n *= 2;

    for(int i = 1; i <= n; i++)
        id[i] = i;

    for(int i = 1; i <= n; i++)
        cin >> s[i];

    for(int i = 1; i <= n; i++)
        cin >> w[i];

    sort(id + 1, id + n + 1, cmp);

    while(r--) {
        sw = sl = 1;
        for(int i = 1; i <= n; i += 2) {
            int a = w[id[i]], b = w[id[i + 1]];
            if(a > b) {
                s[id[i]]++;
                win[sw++] = id[i];
                lose[sl++] = id[i + 1];
            }
            else {
                s[id[i + 1]]++;
                lose[sl++] = id[i];
                win[sw++] = id[i + 1];
            }
        }
        merge();
    }
    cout << id[q] << endl;
    return 0;
}
2023/11/18 23:02
加载中...