比赛 防止isaac的小练习day1 评测结果 AAAAAAATTT
题目名称 瑞士轮 最终得分 70
用户昵称 Lethur 运行时间 3.594 s
代码语言 C++ 内存使用 3.75 MiB
提交时间 2016-11-01 10:09:47
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define MAXN 100001
using namespace std;
int n,r,q;
struct Node
{
	int ord;
	int s;
	int w;
} 
N[MAXN],M1[MAXN],M2[MAXN];
bool cmp(const Node& a,const Node& b)
{
	return (a.s==b.s)?(a.ord<b.ord):(a.s>b.s);
}
inline void solve()
{	
	int ai=1;
	int bi=1;
	for(int i=1;i<=2*n;i+=2)
	{
		if(N[i].w>N[i+1].w)
		{
			N[i].s++;
			M1[ai++]=N[i];
			M2[bi++]=N[i+1];
		}
		else
		{
			N[i+1].s++;
			M1[ai++]=N[i+1];
			M2[bi++]=N[i];
		}
	}
	int i=1;
	int j=1;
	int k=1;
	while(i<ai&&j<bi)
	{
		if(cmp(M1[i],M2[j]))
		{
			N[k++]=M1[i++];
		}
		else
		{
			N[k++]=M2[j++];
		}
	}
	while(i<ai)
	{
		N[k++]=M1[i++];
	}
	while(j<bi)
	{
		N[k++]=M2[j++];
	}
	return ;
}
int main()
{
	freopen("swiss.in","r",stdin);
	freopen("swiss.out","w",stdout);
	cin>>n>>r>>q;
	for(int i=1;i<=2*n;i++)
	{
		cin>>N[i].s;
		N[i].ord=i;
	}
	for(int i=1;i<=2*n;i++)
	{
		cin>>N[i].w;
	}
	sort(N+1,N+1+2*n,cmp);
	for(int i=1;i<=r;i++)
	{
		solve();
	}
	cout<<N[q].ord<<endl;
	return 0;
}