题解:P15929 [TOPC 2021] Olympic Ranking

· · 题解

很简单吧。

用个结构体,排序比较的时候看金牌数量,如果不同就比较金牌数量,如果相同再看银牌数量,如果银牌数量不同,就比较银牌数量,反之就比较铜牌数量。

:::warning[注意]{open} 此题的字符串输入需用 getline。但这样输入会导致字符串前多一个空格,所以输入完后再把字符串前面的空格删掉。

可以用 substr 从下标 1 返回字符串,这样就得到了一个前面没有空格的字符串。

排序为降序排序。 :::

:::success[AC Code]

#include<bits/stdc++.h>
#define int long long 
#define rest(i,n,m) for(int i=n;i<=m;i++)
using namespace std;
const int N=307;
int n;
struct node{
    int g,s,b;
    string noc;
}a[N];
bool cmp(node a,node b){
    if(a.g!=b.g) return a.g>b.g;
    if(a.s!=b.s) return a.s>b.s;
    return a.b>b.b;
}

signed main(void){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n;
    rest(i,1,n){
        cin>>a[i].g>>a[i].s>>a[i].b;
        getline(cin,a[i].noc);
        a[i].noc=a[i].noc.substr(1);
    } 
    sort(a+1,a+1+n,cmp);
    cout<<a[1].noc<<endl;
    exit(0);
}

:::