20分求调
查看原帖
20分求调
953181
Floating_Trees楼主2023/8/30 17:33
#include "bits/stdc++.h"

using namespace std;

const int maxn = (int)1e5 + 10;
struct node
{
	int id,s,w;
	void print() { printf ("id=%d s=%d w=%d\n",id,s,w); }
} a[maxn*2],win[maxn],lose[maxn];
int n,r,q;

bool cmp(node n1,node n2)
{
	return n1.s != n2.s ? n1.s > n2.s : n1.id < n2.id;
}

void merge_sort()
{
	int i = 1,j = 1,m = n / 2,t = 0;
	while (i <= m && j <= m)
		if (cmp(win[i],lose[i]))
			a[++t] = win[i++];
		else
			a[++t] = lose[j++];
	while (i <= m)	a[++t] = win[i++];
	while (j <= m)	a[++t] = lose[j++];
}

int main()
{
	
	scanf ("%d%d%d",&n,&r,&q);
	n = n * 2;
	for (int i = 1;i <= n;i++)
		a[i].id = i;
	for (int i = 1;i <= n;i++)
		scanf ("%d",&a[i].s);
	for (int i = 1;i <= n;i++)
		scanf ("%d",&a[i].w);
	sort(a + 1,a + 1 + n,cmp);
	/*
	printf ("\n");
	for (int i = 1;i <= n;i++)
		a[i].print();
	printf ("\n");
	*/
	
	while (r--)
	{
		for (int i = 1;i <= n;i += 2)
		{
			int u = i,v = i + 1;
			if (a[u].w > a[v].w) { a[u].s = a[u].s+1; win[(i+1)/2] = a[u]; lose[(i+1)/2] = a[v]; }
			else { a[v].s = a[v].s + 1; win[(i+1)/2] = a[v]; lose[(i+1)/2] = a[u]; }
		}
		
		merge_sort();
		
		/*
		printf ("\n");
		for (int i = 1;i <= n;i++)
			a[i].print();
		printf ("\n");
		*/
		
	}
	
	printf ("%d",a[q].id);
	
	
	
	return 0;
}
2023/8/30 17:33
加载中...