1. *这个题,本人看过题解和上面大佬的解法之后,颇为赞叹,除以上之外本人还有一个解法,是通过结构体解决这个题。
  2. 首先我们来分析这个题目,这个题规定了队的数量同时也规定了每个队的解体数以及罚时。
  3. 我们可能会想到用数组来存储每个队的解体数以及每个队的罚时,如果我们用两个数组来存储这两组数据,那么这个题我们必须要对分数进行排序,也要对罚时进行排序。比如我们用A[] B[]数组分别储存解体数和罚时数然后排序,但是会有一个关键问题:排序后 A[2] 和B[2]是否对应同一个队的解体数和罚时,显然答案是否定的
  4. 所以我们想到用结构体struct来储存解题和罚时,struct的优势在于:我们可以多给struct分配一个成员即id,队伍1的id就是1(显然在本题中就是Clau,红豆与弗老板的队伍),队伍2id就是2,id就像身份证一样分配给每个队,这么做是为了,计算机检查id的时候一看到id为1,就立马能认出来这是Clau,红豆与弗老板的队伍。 代码如下:
#include<bits/stdc++.h>
using namespace std;
struct dui{
    int ti;//解题的数量
    int shi;//罚时
    int id;//身份
     
};//一般如果我们知道数组长度为某个确定长度之后就可以在后面写,如果不知道解决方法在下
int cmp(dui x,dui y){//依据题目所给的排序原则进行排序
    if(x.ti!=y.ti){
        return x.ti>y.ti;
    }
    return x.shi<y.shi;//有没有else都可以
}
int main(){
    int n;
    cin>>n;
    vector<dui>e(n+1);//这就是解决方法,vector<结构体名称>e(数组长度)
    for(int i=1;i<=n;i++){
        cin>>e[i].ti>>e[i].shi;
        e[i].id=i;//第几次输入就是几队
    }
    int paiming=0;
    sort(e.begin(),e.end(),cmp);
    for(int i=1;i<=n;i++){
        if(e[i].id==1){//与数组相比优势就体现在这里
            index=i;//记录弗老板的排名
        }
    }
    if(index<=n/10)cout<<"gold";//这里其实写成n*0.1类似的整数乘以浮点数形式也是可以的,因为这里我们只需判断大小即可,如果需要精确判断即==则万万不可此类方法
    else if(index<=n/10*3)cout<<"silver";
    else if(index<=n/10*6)cout<<"bronze";
    else{
        cout<<"iron";
    }
}