比赛 |
防止颓废的小练习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;
}