题目描述
世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,AA市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%150%划定,即如果计划录取mm名志愿者,则面试分数线为排名第m \times 150%m×150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。
输入样例
6 3
1000 90
3239 88
2390 95
7231 84
1005 95
1001 88
输出样例
88 5
1005 95
2390 95
1000 90
1001 88
3239 88
m×150%=3×150%=4.5,向下取整后为4。保证4个人进入面试的分数线为8888,但因为88有重分,所以所有成绩大于等于88 的选手都可以进入面试,故最终有5个人进入面试。
头文件是#include< cmath >
ceil(nu’m) 函数向上舍入为最接近的整数。
如需向下舍入为最接近的整数,请查看 floor(num) 函数。
如需对浮点数进行四舍五入,请查看 round(num) 函数。
代码如下:
#include<iostream>
#include<algorithm>
#include<cmath>
#include<stdio.h>
using namespace std;
const int N=5000;
struct Fen{
int a,b;//a是学号,b是分数
};
bool cmp(Fen x,Fen y)
{
if(x.b>y.b) return true;
if(x.b==y.b&&x.a<y.a) return true;
else return false;
}
int main()
{
struct Fen fen[N];
int n,m;
int sum=0;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>fen[i].a>>fen[i].b;
}
sort(fen,fen+n,cmp);
int num=floor(m*1.5);
for(int i=num;i<n;i++)
if(fen[i].b==fen[num-1].b)
{
sum++; //判断共有多少人
}
printf("%d %d\n",fen[num-1].b,num+sum);//输出分数线和人数
for(int i=0;i<num+sum;i++)
{
printf("%d %d\n",fen[i].a,fen[i].b);
}
return 0;
}