[C++] 纯文本查看 复制代码 #include <iostream> // 包含输入输出流库,用于输入输出功能#include <vector> // 包含向量容器库,用于使用vector#include <algorithm> // 包含算法库,用于使用sort函数
using namespace std; // 使用标准命名空间,省去std::前缀
// 定义一个结构体来表示选手struct Candidate { int id; // 报名号 int score; // 笔试成绩};
// 比较函数,用于排序bool compare(const Candidate &a, const Candidate &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; // 从标准输入读入n和m的值
vector<Candidate> candidates(n); // 创建一个大小为n的vector存储候选人信息
// 读取所有选手的信息 for (int i = 0; i < n; ++i) { cin >> candidates[i].id >> candidates[i].score; // 读取每个候选人的id和成绩 }
// 按照成绩从高到低排序,成绩相同则按报名号升序排序 sort(candidates.begin(), candidates.end(), compare); // 使用自定义的compare函数进行排序
// 计算面试分数线的索引 int thresholdIndex = m * 1.5; // m的1.5倍向下取整,得到分数线的索引
// 获取面试分数线 int interviewScoreLine = candidates[thresholdIndex - 1].score; // 分数线是索引处的候选人得分
// 统计实际进入面试的选手数量 int actualInterviewCount = 0; // 初始化计数器 for (const auto &candidate : candidates) { // 遍历所有候选人 if (candidate.score >= interviewScoreLine) { // 如果候选人分数大于等于分数线 actualInterviewCount++; // 增加计数 } else { break; // 如果遇到分数低于分数线的,直接跳出循环 } }
// 输出面试分数线和实际进入面试的选手数量 cout << interviewScoreLine << " " << actualInterviewCount << endl;
// 输出所有进入面试的选手信息 for (int i = 0; i < actualInterviewCount; ++i) { // 对于所有进入面试的候选人 cout << candidates[i].id << " " << candidates[i].score << endl; // 输出其id和得分 }
return 0; // 程序结束}
|