记录编号 |
261471 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2011]瑞士轮 |
最终得分 |
100 |
用户昵称 |
Riolu |
是否通过 |
通过 |
代码语言 |
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;
}