10分,用的归并,样例过了
查看原帖
10分,用的归并,样例过了
738674
isJason楼主2023/6/19 21:39
#include<bits/stdc++.h>
using namespace std;

struct m{
	int s, w, bh;
}dw[200002], win[100001], los[100001];
int n, r, q;

bool cmp(m a, m b){
	return a.w>b.w;
}

int main(){
	cin>>n>>r>>q;
	for(int i=1; i<=2*n; i++){
		cin>>dw[i].s;
	}
	for(int i=1; i<=2*n; i++){
		cin>>dw[i].w;
	}
	for(int i=1; i<=2*n; i++){
		dw[i].bh=i; 
	}
	
	sort(dw+1, dw+2*n+1, cmp);
	
	for(int i=1; i<=r; i++){
		int wid=1, lid=1;
		for(int j=1; j<=2*n-1; j++){
			if(j%2==1){
				if(dw[j].w>=dw[j+1].w){
					dw[j].s++;
					win[wid]=dw[j];
					los[lid]=dw[j+1];
					wid++; lid++;
				}else{
					dw[j+1].s++;
					win[wid]=dw[j+1];
					los[lid]=dw[j];
					wid++; lid++;
				}
			}
		}
		int tw=1, tl=1;
		int p=1;
		while(tw<=n&&tl<=n){
			if(win[tw].s>los[tl].s){
				dw[p]=win[tw];
				p++; tw++;
			}else if(win[tw].s==los[tl].s){
				if(win[tw].bh<los[tl].bh){
					dw[p]=win[tw];
					p++; tw++;
				}else{
					dw[p]=los[tl];
					p++; tl++;
				}
			}else{
				dw[p]=los[tl];
				p++; tl++;
			}
		}
		while(tw<=n){
			dw[p]=win[tw];
			p++; tw++;
		}
		while(tl<=n){
			dw[p]=los[tl];
			p++; tl++;
		}
	}
	cout<<dw[q].bh;
	return 0;
}
2023/6/19 21:39
加载中...