文章目录
- AcWing 3375. 成绩排序
- AC代码
AcWing 3375. 成绩排序
本题链接:AcWing 3375. 成绩排序
本博客给出本题截图:
AC代码
代码解释:题目中要求的无非就是在分数一样的情况下,排序的顺序仍为输入时的顺序,故本题可以用stable_sort,这个函数实现的本质为归并排序,属于稳定排序,是可以直接满足题目需求的,只需要重载小于号和大于号即可,用sort也可以,但是如果用sort排序,我们在重载大于号和小于号的时候还需要传入一个id(顺序),如果score值相同的话,返回id小的数。
关于重载运算法:直接记住固定格式即可。
代码:
stable_sort版本
#include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 1010; struct Person { string name; int score; bool operator < (const Person& t) const //重载小于号 { return score < t.score; } bool operator > (const Person& t) const //重载大于号 { return score > t.score; } }q[N]; int main() { int n, m; cin >> n >> m; for (int i = 0; i < n; i ++ ) cin >> q[i].name >> q[i].score; if (m) stable_sort(q, q + n); else stable_sort(q, q + n, greater<Person>()); for (int i = 0; i < n; i ++ ) cout << q[i].name << ' ' << q[i].score << endl; return 0; }
sort版本
#include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 1010; struct Person { string name; int score; int id; bool operator < (const Person& t) const //重载小于号 { if (score != t.score) return score < t.score; else return id < t.id; } bool operator > (const Person& t) const //重载大于号 { if (score != t.score) return score > t.score; else return id < t.id; } }q[N]; int main() { int n, m; cin >> n >> m; for (int i = 0; i < n; i ++ ) { cin >> q[i].name >> q[i].score; q[i].id = i; } if (m) sort(q, q + n); else sort(q, q + n, greater<Person>()); for (int i = 0; i < n; i ++ ) cout << q[i].name << ' ' << q[i].score << endl; return 0; }