0分求助,谢谢!
查看原帖
0分求助,谢谢!
948326
Sherrymini楼主2024/1/20 20:57
#include <cstdio>
#include <algorithm>
using namespace std;
struct peo{
    int id,w,sc;
}a[200005],win[200005],lose[200005];
void f(int x){
    int i = 1,j = 1,y = 1;
    while(i <= x && j <= x){
        if(win[i].sc > lose[j].sc){
            a[y] = win[i];
            i++;
            y++;
        }else if(win[i].sc == lose[j].sc){
            if(win[i].id < lose[j].id){
                a[y] = win[i];
                i++;
                y++;
            }else{
                a[y] = lose[j];
                j++;
                y++;
            }
        }else{
            a[y] = lose[j];
            j++;
            y++;
        }
    }
    while(i <= x){
        a[y] = win[i];
        i++;
        y++;
    }
    while(j <= x){
        a[y] = lose[j];
        j++;
        y++;
    }
}
bool cmp(peo a,peo b){
    if(a.sc == b.sc) return a.id < b.id;
    return a.sc < b.sc;
}
int main(){
    int n,r,q;
    scanf("%d%d%d",&n,&r,&q);
    for(int i = 1;i <= n;i++){
        scanf("%d",&a[i].sc);
        a[i].id = i;
    }
    for(int i = 1;i <= n;i++){
        scanf("%d",a[i].w);
    }
    sort(a + 1,a + n + 1,cmp);
    while(r--){
        int k = 1;
        for(int i = 1;i <= n - 1;i += 2){
            if(a[i].w < a[i + 1].w){
                a[i + 1].sc++;
                win[k] = a[i + 1];
                lose[k] = a[i];
                k++;
            }else{
                a[i].sc++;
                win[k] = a[i];
                lose[k] = a[i + 1];
                k++;
            }
        }
        k--;
        f(k);;
    }
    printf("%d",a[q].id);
    return 0;
}
2024/1/20 20:57
加载中...