比赛 防止颓废的小练习v0.15 评测结果 AAAAAAAAAA
题目名称 瑞士轮 最终得分 100
用户昵称 农场主 运行时间 0.703 s
代码语言 C++ 内存使用 6.39 MiB
提交时间 2016-10-17 21:42:03
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring> 
#define maxn 200001
using namespace std;
class poi{
public:
	int x,id;
	bool operator < (const poi b)const{
		return x==b.x?id<b.id:x>b.x;
	}
};
poi ls[maxn],rs[maxn],s[maxn];
int w[maxn],p[maxn];
int n,r,q;
void read(){
	scanf("%d%d%d",&n,&r,&q);
	for (int i=1;i<=2*n;i++){
		scanf("%d",&s[i].x);
		s[i].id=i;
	}
	for (int i=1;i<=2*n;i++){
		scanf("%d",&w[i]);
	}
}
void sort(){
	for (int i=1;i<=n;i++){
		int l=(i<<1)-1,r=(i<<1);
		if (w[s[l].id]<w[s[r].id]){
			rs[i]=s[l];
			ls[i]=s[r];
			ls[i].x++;
		}
		else{
			ls[i]=s[l];
			ls[i].x++;
			rs[i]=s[r];
		}
//		printf("	%d %d\n",rs[i].x,rs[i].id);
	}
	int totl=1,totr=1;
	for (int i=1;i<=2*n;i++){
		if ((totr>n)||(totl<=n&&ls[totl]<rs[totr])){
			s[i]=ls[totl++];
		}
		else{
			s[i]=rs[totr++];
		}
//		printf("%d ",s[i].x);
	}
}
int main(){
	freopen("swiss.in","r",stdin);
	freopen("swiss.out","w",stdout);
	read();
	sort(s+1,s+2*n+1);
	for (int i=1;i<=2*n;i++){
//		printf("%d %d\n",s[i].x,s[i].id);
	}
	for (int i=1;i<=r;i++){
		sort();
	}
	printf("%d\n",s[q].id);
	return 0;
}