0分求助(在线等)
查看原帖
0分求助(在线等)
1110359
TLE_MLE_RE楼主2024/7/5 15:11
#include <bits/stdc++.h>
using namespace std;
// 定义学生结构体,包含学生ID和分数两个字段
struct Student {
    int id;
    int score;
};
//比较函数,用于排序。首先按分数降序,分数相同时按ID升序
bool cmp(Student a, Student b) {
    if (a.score == b.score) {
        return a.id < b.id; // ID较小的排前面
    }
    return a.score > b.score; // 分数较高的排前面
}
int main() {
    int n, m; // n为学生总数,m为要查询的排名位置
    cin >> n >> m; // 从输入读取学生总数和排名位置
    // 使用vector存储学生信息
    vector<Student> students(n);
    for (int i = 0; i < n; i++) {
        cin >> students[i].id >> students[i].score; // 依次读取每个学生的ID和分数
    }
    // 对学生列表按cmp规则排序
    sort(students.begin(), students.end(), cmp);    
    // 找出排名m的学生的分数作为分数线
    int cutoff = students[m - 1].score;
    // 统计分数线及以上的学生人数,考虑并列情况
    int count = 0;
    for (int i = m; i < n && students[i].score >= cutoff; i++) {
        count++; // 分数相同的学生数量加一
    }
    // 输出分数线、分数线及以上的学生人数
    cout << cutoff << " " << m + count << endl;
    // 输出分数线及以上所有学生的信息
    for (int i = 0; i < m + count; i++) {
        cout << students[i].id << " " << students[i].score << endl;
    }
    return 0;
}

2024/7/5 15:11
加载中...