求助各位大牛们,悬关注啊
查看原帖
求助各位大牛们,悬关注啊
753554
kn_wlq楼主2023/5/19 19:00

代码:

#include<iostream>
#include<algorithm>
using namespace std;
struct go{//结构体 
	long long b,f,s;
}w[10000005],l[10000005],a[10000005];//定义数组 
bool cmp(const go &x,go &y){//结构体快排 
	if(x.f==y.f) return x.b<y.b;
	return x.f>y.f; 
}
int main(){
	int n,r,q,k,j;//定义 
	cin>>n>>r>>q;//输入 
	for(int i=1;i<=2*n;i++){//有2*n个人 
		cin>>a[i].f;//输入分数 
		a[i].b=i;//每个人都有编号 
	}
	for(int i=1;i<=2*n;i++){
		cin>>a[i].s;//输入实力值 
	}
	sort(a+1,a+1+2*n,cmp);//快排 
	
	while(r--){//一共有r场比赛 
		for(int i=1;i<=2*n;i++){
			cout<<a[i].f<<"t";
		}
		cout<<endl;
			for(int i=1;i<=2*n;i++){
			cout<<a[i].b<<"g";
		}	cout<<endl;
		k=0;
		for(int i=1;i<=2*n;i+=2){
			if(a[i].s>a[i+1].s){//a[i]赢了 
				k++;
				w[k]=a[i];//1号赢了
				l[k]=a[i+1];//2号输了 
				a[i].f+=1;//加一分
			}
			else if(a[i].s<a[i+1].s){//a[i+1]赢了 
				k++;
				l[k]=a[i];//1号输了	 
				w[k]=a[i+1];//2号赢了 
				a[i+1].f+=1;//加一分 
			}
		} 
		int s=1,y=1,z=1;
		while(s<=k&&y<=k){//两队有一队空了 
			if(w[y].f>l[s].f){//赢得分大于输的分 
				a[z]=w[y];//赢得在先 
				z++;//总数+1 
				y++;//赢得编号+1 
			}
			else if(w[y].f<l[s].f){//输大于赢 
				a[z]=l[s];//输的在先 
				z++;
				s++;
			}
			else if(w[y].f==l[s].f){//两队分数相等 
				if(w[y].b<l[s].b){//赢的编号小 
					a[z]=w[y];//赢得先 
					z++;
					y++;
				}
				else{
				 a[z]=l[s];//输的先 
				 z++;
				 s++; 
			}
		}
	}
		while(k>=y){
		a[z]=w[y];
		y++;
		z++;
	}
		while(k>=s){
		a[z]=l[s];
		s++;
		z++;	
	}
}
	cout<<a[q].b;
	return 0;	 
}

这那里错了呀,能帮忙改一下更好

2023/5/19 19:00
加载中...