2009J_2:分数线划定

洛谷:P1068
OJ:P4229

熟练掌握结构体排序

代码实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**************************************************************** 
 * Description: 2009年普及组复赛第二题  分数线划定
 * Author: Alex Li
 * Date: 2024-10-19 03:36:59
 * LastEditTime: 2024-10-19 04:27:24
****************************************************************/
#include<iostream>
#include<cmath>//向下取整floor函数的库
#include<algorithm>//排序函数sort的库
struct fc{
	int num;//编号
	int score;//成绩
}a[5010];
//如果成绩一样,就判断编号大小。小者在前,大者在后。
int cmp (fc n,fc m){
	if (n.score==m.score) return n.num<m.num;
	return n.score>m.score;//从大到小排序
}
using namespace std;
int main(){
	int n,m,lq;
	cin>>n>>m;
	lq=floor(m*1.50);//向下取整,需要强转
	for (int i=1;i<=n;++i) cin>>a[i].num>>a[i].score;
	sort(a+1,a+n+1,cmp);//排序
	cout<<a[lq].score<<" ";//先输出面试分数线
	int i=lq;
    //从被定为分数线的那个人开始,往下搜索是否还有与分数线并列的人,如果有,i++。但不直接输出。
	while (a[i].score==a[i+1].score&&i<=n) i++;
	cout<<i<<endl;//为保证格式,先输出被录取人数
	for (int j=1;j<=i;++j) 
        cout<<a[j].num<<" "<<a[j].score<<endl;//在输出被录取人的编号和成绩
	return 0;
}
Scroll to Top