原题链接:信息学奥赛一本通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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复