分数线划定

来源:互联网 发布:k歌软件哪个好 编辑:程序博客网 时间:2024/06/02 12:34

分数线划定


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 287     通过数: 140 

【题目描述】

世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。

现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。

【输入】

第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数,m 表示计划录取的志愿者人数。输入数据保证m*150%向下取整后小于等于n。

第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000 ≤ k ≤ 9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)。数据保证选手的报名号各不相同。

【输出】

第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。

从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。

【输入样例】

6 31000 903239 882390 957231 841005 951001 88

【输出样例】

88 51005 952390 951000 901001 883239 88

【提示】

样例说明:m*150% = 3*150% = 4.5,向下取整后为4。保证4个人进入面试的分数线为88,但因为88有重分,所以所有成绩大于等于88的选手都可以进入面试,故最终有5个人进入面试。

【来源】


No

【代码】

#include#include#includeusing namespace std;typedef struct Volunteer//定义一个结构体,用来存放志愿者的信息{    int vnum;//志愿者报名号    int score;//志愿者的笔试成绩}Volunteer;int main(){    int n,m;    scanf("%d %d",&n,&m);    Volunteer a[5001];       int i,j;    for(i=1;i<=n;i++)        cin>>a[i].vnum>>a[i].score;    Volunteer tmp;//定义一个中间量,用来交换志愿者的信息for(j=1;j<=n;j++)//选择排序法,志愿者的顺序按照报名号的顺序从小到大排列{        for(i=j+1;i<=n;i++){if(a[j].vnum > a[i].vnum){                tmp = a[i];                a[i] = a[j];                a[j] = tmp;}        }    }    for(j=n;j>=1;j--)//冒泡排序法,将笔试成绩高的志愿者排在前面{        for(i=1;i<=j;i++){            if(a[i].score < a[i+1].score){                tmp = a[i];                a[i] = a[i+1];                a[i+1] = tmp;              }        }    }int count=m*1.5;//获得面试资格的志愿者的个数    for(i=1;i<=m*1.5;i++){if(a[i].score==a[i+1].score)//如果超过了count数的人都超过了面试分数线,则count加一。count++;elsebreak;}cout<

【说明】

vc6.0运行成功

原创粉丝点击