怎么硕呢?能暴力的题目绝对不仔细思考

这题有个坑,就是分数相同的人,得按照先后次序来排,注意不是字典序噢,可以在结构体里边再多加一个项seq用来记录每个同学进入的位次

#include <bits/stdc++.h>
using namespace std;

struct studentInfo {
    string name;
    int mark;
    int seq;//记录输入的顺序
    studentInfo(string _name, int _mark, int _seq) {
        name = _name;
        mark = _mark;
        seq = _seq;
    }
 };

//从大到小 k=0
bool cmp1(studentInfo a, studentInfo b) {
    if(a.mark != b.mark ) return a.mark > b.mark;
    //先进来的在前面
    else return a.seq < b.seq;
}
//从小到大 k=1
bool cmp2(studentInfo a, studentInfo b) {
    if(a.mark != b.mark ) return a.mark < b.mark;
    //先进来的在前面
    else return a.seq < b.seq;
}

void sortasMark(vector<studentInfo> &s ,int k) {
    if(k == 0) {
        sort(s.begin(),s.end(), cmp1);
    } else
        sort(s.begin(),s.end(), cmp2);
    for(int i = 0; i < s.size(); i++) {
        cout << s[i].name << " " << s[i].mark << endl;
    }
}


int main()
{
    int n,k,mark;
    string str;
    vector<studentInfo> s;
    cin >> n;
    cin >> k;
    for(int i = 1; i <= n; i++) {
        cin>>str>>mark;
        studentInfo temp = studentInfo(str,mark,i);
        s.push_back(temp);
    }
    sortasMark(s,k);
    return 0;
}