社区讨论
70pts求调
P1309[NOIP 2011 普及组] 瑞士轮参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo10panv
- 此快照首次捕获于
- 2023/10/22 13:17 2 年前
- 此快照最后确认于
- 2023/11/02 12:47 2 年前
C
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n,r,q,w[100010];
struct GGBond{
int s;
int num;
}per[200010],win[100010],lose[100010];
bool cmp(GGBond a,GGBond b){
if(a.s==b.s) return a.num<b.num;
return a.s>b.s;
}
void MyLittlePony(){
int i=1,j=1,k=1;
while(i<=n && j<=n){
if(win[i].s>lose[j].s || (win[i].s==lose[j].s && win[i].num<lose[j].num)){
per[k].num=win[i].num;
per[k++].s=win[i++].s;
}else{
per[k].num=lose[j].num;
per[k++].s=lose[j++].s;
}
}
while(i<=n){
per[k].num=win[i].num;
per[k++].s=win[i++].s;
}
while(j<=n){
per[k].num=lose[j].num;
per[k++].s=lose[j++].s;
}
return;
}
int main(){
scanf("%d%d%d",&n,&r,&q);
for(int i=1;i<=2*n;i++){
scanf("%d",&per[i].s);
per[i].num=i;
}
for(int i=1;i<=2*n;i++)
scanf("%d",&w[i]);
sort(per+1,per+1+2*n,cmp);
// for(int i=1;i<=2*n;i++){//
// printf("0:%d %d %d\n",per[i].num,per[i].s,w[i]);//
// }//
for(int j=1;j<=r;j++){
int tt=1;
for(int i=1;i<=2*n;i+=2){
if(w[per[i].num]>w[per[i+1].num]){
win[tt].num=per[i].num;
win[tt].s=per[i].s+1;
lose[tt].num=per[i+1].num;
lose[tt].s=per[i+1].s;
}else{
win[tt].num=per[i+1].num;
win[tt].s=++per[i+1].s;
lose[tt].num=per[i].num;
lose[tt].s=per[i].s;
}
tt++;
}
MyLittlePony();
// for(int i=1;i<=2*n;i++){//
// printf("%d:%d %d %d\n",j,per[i].num,per[i].s,w[per[i].num]);//
// }//
}
printf("%d",per[q].num);
return 0;
}
第二个点庞大的数据量让我无从下手TAT
调了一个星期了(痛哭流涕)
回复
共 2 条回复,欢迎继续交流。
正在加载回复...