裘煮,30pts,样例过了
查看原帖
裘煮,30pts,样例过了
534077
TAOTAO2011楼主2024/8/23 22:13
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5; 
struct grade{
	int yu, shu, ying;//代表语数英成绩 
	int zong;//总分 
	int pai;//排名 
	int id;//原先位置 
}a[N];
bool cmp(grade a, grade b){
	if(a.zong != b.zong)
		return a.zong > b.zong;
	else if(a.yu + a.shu != b.yu + b.shu)
		return a.yu + a.shu > b.yu + b.shu;
	else if(max(a.yu, a.shu) != max(b.yu, b.shu))
		return max(a.yu, a.shu) > max(b.yu, b.shu);
}//排序 
int main()
{
	int n;
	cin>>n;
	for(int i = 1;i <= n;i++){
		cin>>a[i].yu>>a[i].shu>>a[i].ying;
		a[i].zong = a[i].yu + a[i].shu + a[i].ying;
		a[i].id = i;
	} 
	sort(a + 1, a + 1 + n, cmp);
	int ans = 0;//指第几个数 
	int cnt = 1;//判断如果排名相同往后面留空的值 
	for(int i = 1;i <= n;i++){
		if(a[i].zong == a[i - 1].zong && (a[i].yu + a[i].shu) == (a[i - 1].yu + a[i - 1].shu) && max(a[i].yu, a[i].shu) == max(a[i - 1].yu, a[i].shu)){
		    a[i].pai = ans;
		    cnt++;
		}else{
			a[i].pai = ans + cnt;
			ans++;
		}
	}//写出所有人的排名 
	//for(int i = 1;i <= n;i++){
	//	cout<<a[i].yu<<" "<<a[i].shu<<" "<<a[i].ying<<" "<<a[i].pai<<" "<<a[i].id<<endl;
	//}这部分没用 
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			if(a[j].id == i){
				cout<<a[j].pai<<endl;//如果它在原来的第i个位置,就输出它的排名 
				break;
			}
		}
	}
	return 0;
}
2024/8/23 22:13
加载中...