求调30pts WA #2,3,4,5,8,9,10
查看原帖
求调30pts WA #2,3,4,5,8,9,10
736486
4806xjh楼主2024/3/27 17:58
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct player{
	int id,s,v;
}a[200007],Right[200007],Left[200007];
bool cmp(player x,player y){
	if(x.s!=y.s) return x.s>y.s;
	else x.id<y.id;
}
signed main(){
	int n,r,q;
	cin>>n>>r>>q;
	for(int i=1;i<=2*n;i++){
		cin>>a[i].s;
		a[i].id=i;
	}
	for(int i=1;i<=2*n;i++){
		cin>>a[i].v;
	}
	sort(a+1,a+1+2*n,cmp);
	while(r--){
		int cnt1,cnt2;
		cnt1=cnt2=0;
		for(int i=1;i<=2*n;i+=2){
			if(a[i].v<a[i+1].v){
				Right[++cnt1]=a[i];
				Left[++cnt2]=a[i+1];
				Left[cnt2].s+=1;
			}else{
				Right[++cnt1]=a[i+1];
				Left[++cnt2]=a[i];
				Left[cnt2].s+=1;
			}
		}
		int i,j,k=0;
		i=1,j=1;
		while(i<=cnt1&&j<=cnt2){
			if(Right[i].s<Left[j].s){
				a[++k]=Left[j];
				j++;
			}else if(Right[i].s>Left[j].s){
				a[++k]=Right[i];
				i++;
			}else if(Right[i].id<Left[j].id){
				a[++k]=Right[i];
				i++;
			}else{
				a[++k]=Left[j];
				j++;
			}
		}
		while(i<=cnt1) a[++k]=Right[i++];
		while(j<=cnt2) a[++k]=Left[j++];
	}
	cout<<a[q].id;
	return 0;
}
2024/3/27 17:58
加载中...