算法知识点: 模拟,排序,多关键字排序
复杂度:
解题思路:
先将所有同学按分数高者优先、序号小者优先进行双关键字排序。
然后求出分数线:即排名在 的同学的分数。
最后找出成绩大于等于分数线的同学人数。
C++ 代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 5010; int n, m; struct Person { int id, score; bool operator< (const Person &W)const { if (score != W.score) return score > W.score; return id < W.id; } }person[N]; int main() { scanf("%d%d", &n, &m); for (int i = 0; i < n; i ++ ) scanf("%d%d", &person[i].id, &person[i].score); sort(person, person + n); int k = m * 1.5; while (k < n && person[k - 1].score == person[k].score) k ++ ; printf("%d %d\n", person[k - 1].score, k); for (int i = 0; i < k; i ++ ) printf("%d %d\n", person[i].id, person[i].score); return 0; }