1 条题解

  • 0
    @ 2024-12-24 9:54:26

    C++ :

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N = 100005;
    struct person{
    	int id,score,power;
    };
    person a[2*N],win[N],lose[N];
    
    bool comp(const person &x,const person &y){
    	if (x.score!=y.score) return x.score>y.score;
    	return x.id<y.id;
    }
    
    void swiss(int n){
    	int i,j,k;
    	for (k=i=j=1; k<=n; k++)
    		if (a[2*k-1].power>a[2*k].power)
    			a[2*k-1].score++,win[i++]=a[2*k-1],lose[j++]=a[2*k];
    		else a[2*k].score++,win[i++]=a[2*k],lose[j++]=a[2*k-1];
    	for (k=i=j=1; i<=n&&j<=n; k++)
    		if (comp(win[i],lose[j])) a[k]=win[i++];
    		else a[k]=lose[j++];
    	while (i<=n) a[k++]=win[i++];
    	while (j<=n) a[k++]=lose[j++];
    }
    
    int main(){
    	int n,r,q;
    	cin>>n>>r>>q;
    	for (int i=1; i<=2*n; i++){
    		cin>>a[i].score;
    		a[i].id=i;
    	}
    	for (int i=1; i<=2*n; i++) cin>>a[i].power;
    	sort(a+1,a+2*n+1,comp);
    	for (int i=1; i<=r; i++) swiss(n);
    	cout<<a[q].id<<endl;
    	return 0;
    }
    
    • 1

    信息

    ID
    1042
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者