社区讨论

求助,后七个点WA(给一永久关注

B3968[GESP202403 五级] 成绩排序参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lyx2cvpz
此快照首次捕获于
2024/07/22 22:09
2 年前
此快照最后确认于
2024/07/23 08:26
2 年前
查看原帖
求大佬指出错误类型或者给个hack数据之类的
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
struct fac{
	int chinese;
	int english;
	int math;
	int num;
	int grade;
	int all_point;
}a[N];
int n;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d%d%d",&a[i].chinese,&a[i].math,&a[i].english);
	    a[i].num=i;
		a[i].all_point=a[i].chinese+a[i].math+a[i].english;
	}
	int last=-1;
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			if(a[i].all_point>a[j].all_point){
				continue;
			}else if(a[i].all_point==a[j].all_point){
				if(a[i].chinese+a[i].math>a[j].chinese+a[j].math){
					continue;
				}else if(a[i].chinese+a[i].math==a[j].chinese+a[j].math){
					if(max(a[i].chinese,a[i].math)>max(a[j].chinese,a[j].math)){
						continue;
					}else if(max(a[i].chinese,a[i].math)==max(a[j].chinese,a[j].math)){
						a[i].grade=last;
						a[j].grade=last;
					}else{
						swap(a[i],a[j]);
						last--;
					}
				}else{
					swap(a[i],a[j]);
					last--;
				}
			}else{
				swap(a[i],a[j]);
				last--;
			}
		}
	}
	int l=0,r=0,lei=1;
	for(int i=1;i<=n;i++){
		if(a[i].grade>0){
			continue;
		}else if(a[i].grade==0){
			a[i].grade=lei;
			lei++;
		}else{
			int l=i,r=i;
			int find=a[i].grade;
			for(int j=i+1;j<=n;j++){
				if(a[j].grade==find){
					r=j;
				}else{
					break;
				}
			}
			int x=lei;
			for(int j=l;j<=r;j++){
				a[j].grade=x;
				lei++;
			}
			lei--;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[j].num==i){
				printf("%d\n",a[j].grade);
				break;
			}
		}
	}
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...