2998 分数线划定 结构体排序

解决思路

 
  • 读取输入:读取选手数量 n 和计划录取人数 m,以及每个选手的报名号和笔试成绩。
 
  • 排序:根据笔试成绩对选手进行排序,如果成绩相同,则按报名号由小到大排序。
 
  • 确定面试分数线:计算 m * 1.5(向下取整)名选手的分数作为面试分数线。
 
  • 筛选进入面试的选手:筛选出笔试成绩不低于面试分数线的所有选手。
 
  • 输出结果:输出面试分数线和进入面试的选手的实际人数,以及这些选手的报名号和笔试成绩。
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e5 + 10;
    
    // 定义一个结构体来存储每个选手的报名号和笔试成绩
    struct node {
        int id;
        int score;
    };
    
    // 比较函数,用于按照笔试成绩对选手进行排序
    bool cmp(node a, node b) {
        if (a.score == b.score) return a.id < b.id;
        else return a.score > b.score;
    }
    
    node a[N];
    int n, m;
    
    int main() {
        // 读取选手数量和计划录取人数
        cin >> n >> m;
        for (int i = 1; i <= n; i++) {
            cin >> a[i].id >> a[i].score;
        }
    
        // 按照笔试成绩对选手进行排序
        sort(a + 1, a + 1 + n, cmp);
    
        // 计算面试分数线
        m = m * 1.5;
        int i = 1;
        while (a[i].score >= a[m].score && i <= n) i++;
        i--;
    
        // 输出面试分数线和进入面试的选手的实际人数
        cout << a[i].score << " " << i << endl;
    
        // 输出进入面试的选手的报名号和笔试成绩
        for (int j = 1; j <= i; j++) {
            cout << a[j].id << " " << a[j].score << endl;
        }
    
        return 0;
    }

     

posted @ 2024-09-30 16:44  CRt0729  阅读(20)  评论(0编辑  收藏  举报