0蛋WA+RE求调
查看原帖
0蛋WA+RE求调
1048875
GLY0912楼主2024/8/11 21:13

RT

#include <iostream>
#include <algorithm>
using namespace std;
const int N=2e5+10;
struct node{
	int s,id,w;
}a[N];
int n,r,q,lose[N],win[N],s[N];
bool cmp(int x,int y){
  if(s[x]==s[y]) return x<y;
  return s[x]>s[y];
}
bool cmp1(node aa,node bb){
	return aa.s<bb.s;
}
void merge(){
  	int i,j;
  	i=j=1,a[0].id=0;
  	while(i<=win[0]&&j<=lose[0]){
  		if(cmp(win[i],lose[j])) a[++a[0].id].id=win[i++];
    	else a[++a[0].id].id=lose[j++];
	}while(i<=win[0]) a[++a[0].id].id=win[i++];
  	while(j<=lose[0]) a[++a[0].id].id=lose[j++];
  	return ;
}
int main(){
	cin>>n>>r>>q;
	for(int i=1;i<=n*2;i++) cin>>a[i].s,a[i].id=i;
	for(int i=1;i<=n*2;i++) cin>>a[i].w;
	sort(a+1,a+2*n+1,cmp1);
	while(r--){
		for(int i=1;i<=n*2;i++){
			if(i%2){
				if(a[i].w<a[i+1].w){
					a[i+1].s++;s[i+1]++;
					win[++win[0]]=a[i+1].id;
            		lose[++lose[0]]=a[i].id;
				}else{
					a[i].s++;s[i]++;
					win[++win[0]]=a[i].id;
            		lose[++lose[0]]=a[i+1].id;
				}
			}
		}merge();
	}cout<<a[q].id;
	return 0;
}
2024/8/11 21:13
加载中...