B3968 [GESP202403 五级] 成绩排序

一定要把题读懂!!!!

首先按照他给的要求进行排序

然后他要按照原来顺序输出排名

那么就直接按照原来序号再排一次,循环输出就行了~~~~

qwq

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define vi vector<int>
#define sz(x) (int)x.size()
struct o{
    int a,b,c,sum1;//三者和
    int sum2;//二者和
    int z;//最大值
    int id;//原来的顺序
    int pai;//排名
};
bool cmp(o a,o b){
    if(a.sum1!=b.sum1)return a.sum1<b.sum1;
    if(a.sum2!=b.sum2)return a.sum2<b.sum2;
    if(a.z!=b.z)return a.z<b.z;
    return false;
}
int cmp2(o a,o b){
    return a.id<b.id;
}

void solve(){
    int n;cin>>n;
    vector<o> a(n); 
    for(int i=0;i<n;i++){
        cin>>a[i].a>>a[i].b>>a[i].c;
        a[i].sum1=a[i].a+a[i].b+a[i].c;
        a[i].sum2=a[i].a+a[i].b;
        a[i].z=max(a[i].a,a[i].b);
        a[i].id=i+1;
    }
    sort(a.begin(),a.end(),cmp);//按照成绩排序
    int t=1;
    for(int i=n-1;i>=0;i--){
        if(i==n-1)a[i].pai=t;
        else if(a[i].sum1==a[i+1].sum1&&a[i].sum2==a[i+1].sum2&&a[i].z==a[i+1].z){a[i].pai=a[i+1].pai;t++;}
        else a[i].pai=++t;
    }
    sort(a.begin(),a.end(),cmp2);//按照序号排序
    for(int i=0;i<n;i++){
        cout<<a[i].pai<<endl;
    }
}

signed main()
{
    solve();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值