记录编号 261471 评测结果 AAAAAAAAAA
题目名称 [NOIP 2011]瑞士轮 最终得分 100
用户昵称 GravatarRiolu 是否通过 通过
代码语言 C++ 运行时间 1.090 s
提交时间 2016-05-17 19:13:05 内存使用 2.60 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#define N 200001
using namespace std;
int n,r,q;
struct note {int s,w,num;} a[N],t1,t0;
int cmp(note x,note y){
	if(x.s>y.s) return 1;
	if(x.s<y.s) return 0;
	return x.num<y.num;
	}
queue<note> p[2];

int main(){
	freopen("swiss.in","r",stdin);
	freopen("swiss.out","w",stdout);
	
	ios::sync_with_stdio(false);
	int i,j;
	cin>>n>>r>>q;
	for(i=1;i<=n*2;i++) {cin>>a[i].s;a[i].num=i;}
	for(i=1;i<=n*2;i++) cin>>a[i].w;
	
	sort(a+1,a+n*2+1,cmp);
	for(i=1;i<=r;i++){
		
		for(j=1;j<=n*2;j+=2)
			if(a[j].w>a[j+1].w)
				{a[j].s++;p[0].push(a[j]);p[1].push(a[j+1]);}
			else 
				{a[j+1].s++;p[1].push(a[j]);p[0].push(a[j+1]);}
			
		int s=1;
		while((!p[0].empty())&&(!p[1].empty())){
			t0=p[0].front();t1=p[1].front();
			if(t0.s>t1.s)	{a[s++]=t0;p[0].pop();}
			if(t0.s<t1.s)	{a[s++]=t1;p[1].pop();}
			if(t0.s==t1.s&&t0.num<t1.num)
				{a[s++]=t0;p[0].pop();}
			if(t0.s==t1.s&&t0.num>t1.num)
				{a[s++]=t1;p[1].pop();}
			}
			
			while(!p[0].empty())
				{a[s++]=p[0].front();p[0].pop();}
			while(!p[1].empty())
				{a[s++]=p[1].front();p[1].pop();}
				
	}
	cout<<a[q].num;
	return 0;
	}