怎么硕呢?能暴力的题目绝对不仔细思考
这题有个坑,就是分数相同的人,得按照先后次序来排,注意不是字典序噢,可以在结构体里边再多加一个项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;
}