布什,为什么编译错误(在自己的编译器上没问题)
查看原帖
布什,为什么编译错误(在自己的编译器上没问题)
91250
James_NC楼主2024/10/3 23:53
#include<bits/stdc++.h>
using namespace std;
int n;
struct Student{
	int sc[4];
	int num,s,m; 
	int sum;
	bool eq;
}S[11000];
int rank[11000];
bool cmp(const Student &x,const Student &y){
	if(x.sum == y.sum){
		int sx = x.sc[0] + x.sc[1];
		int sy = y.sc[0] + y.sc[1];
		if(x.s == y.s){
			return x.m > y.m;
		}else return x.s > y.s;
	}
	else return x.sum > y.sum;
}
bool is_equal(const Student &x,const Student &y){
	return ((x.sum == y.sum) && (x.s == y.s) &&(x.m == y.m));
}

int main(){
	scanf("%d",&n);
	for(int i = 1;i <= n;i++){
		scanf("%d%d%d",&S[i].sc[0],&S[i].sc[1],&S[i].sc[2]);
		S[i].num = i;
		S[i].sum = S[i].sc[0]+S[i].sc[1]+S[i].sc[2];
		S[i].s = S[i].sc[0] + S[i].sc[1];
		S[i].m = max(S[i].sc[0],S[i].sc[1]);
		S[i].eq = false;
	}
	sort(S+1 , S+n+1 , cmp);
	for(int i = 1;i <= n;i++){
		if (is_equal(S[i],S[i-1]))
			S[i].eq = true;
	}
	for(int i = 1;i <= n;i++){
		if(S[i].eq)
			rank[S[i].num] = rank[S[i-1].num];
		else rank[S[i].num] = i;
	}
	for(int i = 1;i <= n;i++)
		printf("%d\n",rank[i]);
	return 0;
}

2024/10/3 23:53
加载中...