一、题目分析
在题目中需要注意的是,计算出了参加面试的分数线,有重分的人也是可以进入面试的,我们需要得到总的进入面试的人数,然后输出。
在排序的过程中,是先对成绩排序,成绩相同的情况下根据标号排序。结构体和排序cmp()函数的部分可以对应着这个题目看看洛谷 P1093 [NOIP2007 普及组] 奖学金-CSDN博客
二、代码实现
#include<bits/stdc++.h>
using namespace std;
struct node{
int num;
int score;
}s[5010];
int cmp(node a,node b){
if(a.score>b.score) return 1;
else if(a.score<b.score) return 0;
else{
if(a.num<b.num) return 1; //通过成绩排序,成绩相同的情况通过编号排序
else return 0;
}
}
int main(){
int n,m;
cin>>n>>m;
int count=0;
for(int i=0;i<n;i++){
cin>>s[i].num>>s[i].score; //数据输入
}
sort(s,s+n,cmp); //排序
m=floor(m*1.5); //计算进入面试的人数
// cout<<"m"<<' '<<m<<'\n';
for(int i=0;i<n;i++){
if(s[i].score>=s[m-1].score){//计算出有多少个需要输出的数(大于等于第M个人的成绩的人)
count++;
}
}
cout<<s[m-1].score<<' '<<count<<'\n';
for(int i=0;i<count;i++){
cout<<s[i].num<<' '<<s[i].score<<'\n';//输出标号和成绩
}
return 0;
}