赞
踩
小蒜给出了班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
第一行为 n(0<n<20)n(0<n<20),表示班里的学生数目;
接下来的 n 行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过 2020,成绩为一个不大于 100100 的非负整数。
把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。
4
Kitty 80
Hanmeimei 90
Joey 92
Tim 28
Joey 92
Hanmeimei 90
Kitty 80
Tim 28
#include<iostream> #include<queue> using namespace std; struct Node { string name; int num; }; struct cmp { bool operator()(Node a, Node b) { if (a.num == b.num) return a.name > b.name; return a.num < b.num; } //按分数降序,分数相等按名字降序 }; int main() { int n; Node a; cin >> n; priority_queue<Node, vector<Node>, cmp> q; for (int i = 1; i <= n; ++i) cin >> a.name >> a.num, q.push(a); for (int i = 0; i < n; ++i) cout << q.top().name << " " << q.top().num << endl, q.pop(); return 0; }
#include<iostream> #include<vector> #include<algorithm> using namespace std; struct Node { string name; int num; }; bool cmp(Node a, Node b) { if (a.num == b.num) return a.name < b.name; return a.num > b.num; //按分数降序,分数相等按名字降序 } int main() { int n; Node a; cin >> n; vector<Node> v; for (int i = 1; i <= n; ++i) cin >> a.name >> a.num, v.push_back(a); sort(v.begin(), v.end(), cmp); for (int i = 0; i < n; ++i) cout << v[i].name << " " << v[i].num << endl; return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。