社区讨论

后七个全RE

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@lypix3bu
此快照首次捕获于
2024/07/17 15:31
2 年前
此快照最后确认于
2024/07/17 15:40
2 年前
查看原帖
求救,退了好久回来写题都不会了
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=10005;
struct fac{
	int chinese;
	int math;
	int english;
	int all;
	int num;
	int grade;
	int tong;
}a[N];
int n;

int cmp1(fac x,fac y){
	for(int i=1;i<=n;i++){
		if(a[i].num==x.num){
			a[i].tong=-1;
		}
		if(a[i].num==y.num){
			a[i].tong=-1;
		}
	}
}

int cmp(fac a,fac b){
	if(a.all>b.all){
		return 1;
	}else if(a.all==b.all){
		if(a.chinese+a.math>b.chinese+b.math){
			return 1;
		}else if(a.chinese+a.math==b.chinese+b.math){
			if(max(a.chinese,a.math)>max(b.chinese,b.math)){
				return 1;
			}else if(max(a.chinese,a.math)==max(b.chinese,b.math)){
				cmp1(a,b);
				return 1;
			}
		}
	}
	return 0;
}

int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		a[i].num=i;
		scanf("%d%d%d",&a[i].chinese,&a[i].math,&a[i].english);
		a[i].all=a[i].chinese+a[i].math+a[i].english;
	}
	
	sort(a+1,a+n+1,cmp);
	
	int x=0;
	
	for(int i=1;i<=n;i++){
		if(a[i].tong==0){
			a[i].grade=i;//
			x=i;
		}else{
			a[i].grade=x;//x+1 or x
		}
	}
	
	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;
}

回复

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

正在加载回复...