求助,六个点TLE,3、4、5三个点WA,想先知道WA什么原因
查看原帖
求助,六个点TLE,3、4、5三个点WA,想先知道WA什么原因
816572
AbsoluDe楼主2022/11/10 22:00
#include <iostream>
using namespace std;

int N, R, Q;
class Player{
    public:
        int id, s, w;
        void cpy(Player *a){
            id = a->id; s = a->s; w = a->w;
        }
};
int partition(Player *A, int p, int r){
    int key = A[r].s;
    int j = p;
    for (int i = p; i < r; i++){
        if (A[i].s > key){
            swap(A[i], A[j]);
            j++;
        }
    }
    swap(A[r], A[j]);
    return j;
}
void quicksort(Player *A, int p, int r){
    if (p < r){
        int q = partition(A, p, r);
        quicksort(A, p, q-1);
        quicksort(A, q+1, r);
    }
}
void merge(Player *A, Player *win, Player *lose);

int main(){
    cin >> N >> R >> Q;
    Player l[200010], win[100005], lose[100005];
    for (int i = 0; i < 2*N; i++) {
        l[i].id = i + 1;
        cin >> l[i].s;
    }
    for (int i = 0; i < 2*N; i++) cin >> l[i].w;
    //每次循环,先加分,再排序
    quicksort(l, 0, 2*N);
    for (int i = 0; i < R; i++){
        for (int j = 0; j < 2*N; j += 2){
            if (l[j].w > l[j+1].w){
                l[j].s++;
                win[j/2].cpy(&l[j]);
                lose[j/2].cpy(&l[j+1]);
            }
            else if (l[j].w < l[j+1].w){
                l[j+1].s++;
                win[j/2].cpy(&l[j+1]);
                lose[j/2].cpy(&l[j]);
            }
        }
        merge(l, win, lose);
    }
    cout << l[Q-1].id;
    return 0;
}

void merge(Player *A, Player *win, Player *lose){
    int s = 0, t = 0;
    for (int i = 0; i < 2 * N; i++){
        if (t == N){
            A[i].cpy(&win[s]);
            s++;
        }
        else if (s == N){
            A[i].cpy(&lose[t]);
            t++;
        }
        else if (win[s].s > lose[t].s){
            A[i].cpy(&win[s]);
            s++;
        }
        else if (win[s].s < lose[t].s){
            A[i].cpy(&lose[t]);
            t++;
        }
        else if (win[s].s == lose[t].s){
            if (win[s].id < lose[t].id){
                A[i].cpy(&win[s]);
                s++;
            }
            else {
                A[i].cpy(&lose[t]);
                t++;
            }
        }
    }
}
2022/11/10 22:00
加载中...