救命,为什么我的归并排序就过不了,哭了,大佬求解!!!
查看原帖
救命,为什么我的归并排序就过不了,哭了,大佬求解!!!
858888
Redeemer6661楼主2023/11/4 16:17
#include<stdio.h>
struct student {
	int num;
	int sum;
	int power;
};
void merge(struct student *temp,struct student *a,int low,int mid,int up){
	 int i=low,j=mid+1,k=low;
	 while(i<=mid&&j<=up){
	 	if(a[i].sum<a[j].sum) temp[k++]=a[j++];
		 else if(a[i].sum==a[j].sum) {
		 	if(a[i].num<a[j].num) temp[k++]=a[i++];
			else temp[k++]=a[j++]; 
		 }else temp[k++]=a[i++];
	 }
	 while(i<=mid) temp[k++]=a[i++];
	 while(j<=up) temp[k++]=a[j++];
for(int i=0;i<k;i++){
	a[i]=temp[i];
}
}
 void mergesort2(struct student *temp,struct student *a,int low,int up){
     int mid;
     if(low<up){
     	mid=(low+up)/2;
     	mergesort2(temp,a,low,mid);
     	mergesort2(temp,a,mid+1,up);
     	merge(temp,a,low,mid,up);
	 }
 }
 struct student a[200005],temp[200005];
int main (){
   int n,r,q;
   int time=0;
   scanf("%d%d%d" ,&n,&r,&q);
   n=2*n;
   	  
   	  for(int i=0;i<n;i++){
   	  	a[i].num=i+1;
   	  	scanf("%d",&a[i].sum);
		 }
		 for(int i=0;i<n;i++) scanf("%d",&a[i].power);
		 while(time++<=r)
		 {
		 	mergesort2(temp,a,0,n-1); 
		 //for(int i=0;i<n;i++) printf("编号%d : 得分%d\n",a[i].num,a[i].sum);
		 for(int i=0;i<n;i++){
		 	if((i+1)%2==0){
		 		if(a[i].power>a[i-1].power)
				 a[i].sum++;
				 else{
				 	a[i-1].sum++;
				 } 
			 }
		 }
	}
	printf("%d",a[q-1].num);
}
2023/11/4 16:17
加载中...