求助 样例过不了 第一篇题解思路
查看原帖
求助 样例过不了 第一篇题解思路
683768
Allen_yang楼主2024/6/5 19:42

rt

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll MAXN = 200015;
ll a[MAXN], win[MAXN], los[MAXN], s[MAXN], w[MAXN];
ll n, r, q;

bool cmp(ll x, ll y){
	if(x != y)return s[x] > s[y];
	return x < y;
}

void merge(){
	ll l = 1, r = 1;
	a[0] = 0;
	while(l <= win[0] && r <= los[0]){
		if(cmp(win[l], los[r])){
			a[++a[0]] = win[l ++];
		}else{
			a[++a[0]] = los[r ++];
		}
	}
	while(l <= win[0]) a[++a[0]] = win[l ++];
	while(r <= los[0]) a[++a[0]] = los[r ++];
/*	for(int i = 1; i <= n; i ++){
		cout << a[i] << " ";
	}
	cout << "\n";*/
}
int main(){
	cin >> n >> r >> q;
	n *= 2;
	for(ll i = 1; i <= n; i ++){
		cin >> s[i];
		a[i] = i;
	}
	for(ll i = 1; i <= n; i ++) cin >> w[i];
	sort(a + 1, a + 1 + n, cmp);
/*	for(ll i = 1; i <= n; i ++){
		cout << a[i] << " ";
	} 
	cout << "\n";*/
	for(int i = 1; i <= r; i ++){
		win[0] = los[0] = 0;
		for(ll j = 1; j <= n; j += 2){
			if(w[a[j]] > w[a[j + 1]]){
				s[a[j]] ++;
				win[++win[0]] = a[j];
				los[++los[0]] = a[j + 1];
			}else{
				s[a[j + 1]] ++;
				win[++win[0]] = a[j + 1];
				los[++los[0]] = a[j];
			}
		}
		merge();
	}
	cout << a[q] << "\n";
	return 0;
} 

样例输出结果:4

2024/6/5 19:42
加载中...