原题链接:信息学奥赛一本通T1180-分数线划定
解题思路:
排序函数 cmpP
注意事项:
见注释
参考代码:
#include<bits/stdc++.h>
#define RATE 1.5 // 通过比率,1.5
using namespace std;
class P
{
public:
int id; // 报名号
int score; // 分数
P() { }
~P() { }
};
// 分数高的排前面,分数一致时,报名号小的排前面
bool cmpP(P a, P b)
{
if (a.score == b.score) {
return a.id < b.id;
}
else {
return a.score > b.score;
}
}
int main()
{
int n, m;
while (cin >> n >> m) {
int borderline; // 分数线
int passCount = 0; // >= 分数线的人数
P * Person = new P[n]; // 动态分配内存
// 输入
for (int i = 0; i < n; ++i) {
cin >> Person[i].id >> Person[i].score;
}
// 排序
sort(Person, Person + n, cmpP);
// 分数线,强制类型转换到int即下取整
// -1是因为:排名第1的人,在Person数组中下标为0(以此类推)
borderline = Person[(int)(m * RATE) - 1].score;
// 统计通过人数
for (int i = 0; i < n; ++i) {
if (Person[i].score >= borderline) passCount++;
else break;
}
// 输出
cout << borderline << " " << passCount << endl;
for (int i = 0; i < passCount; ++i) {
cout << Person[i].id << " " << Person[i].score << endl;
}
// 收回内存
delete[] Person;
}
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复