算法知识点: 模拟,排序,多关键字排序

复杂度:

解题思路:

先将所有同学按分数高者优先、序号小者优先进行双关键字排序。

然后求出分数线:即排名在 的同学的分数。

最后找出成绩大于等于分数线的同学人数。

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;
}


另外,牛客暑期NOIP真题班限时免费报名
报名链接:https://www.nowcoder.com/courses/cover/live/248
报名优惠券:DCYxdCJ