HDU---Problem B

来源:互联网 发布:选眼镜软件 编辑:程序博客网 时间:2024/06/06 02:20

Problem B

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 307   Accepted Submission(s) : 63

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

2020年东京奥运会志愿者选拔,选拔原则择优录取,选拔委员会对所有报名的志愿者进行笔试,笔试分数达到面试分数线的志愿者方可进行面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数的所有选手。

Input

第一行,输入两个整数n,m(5<=n<=5000),3<=m<=n),中间空格隔开,其中n表示报名参见笔试的志愿者总数,m表示计划录取的志愿者人数。输入数据保证m*150%向下取整后小于等于n。
第二行到第n+1行,每行输入两个整数,中间用空格隔开,分别表示志愿者报名号k(1000<=k<=9999)和该志愿者的笔试成绩s(1<=s<=100)。数据保证志愿者的报名号各不相同。
  测试有多个用例。

Output

第一行输出两个整数,用空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的志愿者实际人数。
  第二行开始分别输出进入面试的志愿者的报名号和笔试成绩,中间用空格隔开,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。

Sample Input

6 31000 903239 882390 957231 841005 951001 88

Sample Output

88 51005 952390 951000 901001 883239 88
#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>using namespace std;struct A{    int k,s;}f[5010],q[5010];bool cmp(A x,A y){    if(x.s==y.s)        return x.k<y.k;    return x.s>y.s;}bool cmp1(int x,int y){    return x>y;}int main(){    int n,m,avg;    int a[5010];    while(~scanf("%d %d",&n,&m))    {        for(int i=0;i<n;i++)        {            scanf("%d %d",&f[i].k,&a[i]);            f[i].s=a[i];//a[]数组用来保存笔试成绩        }        sort(a,a+n,cmp1);//对笔试成绩排序        sort(f,f+n,cmp);//对结构体排序        int l=(int)(m*1.5);//取整        int ans=0,ll=0;        for(int i=0;i<n;i++)        {            if(f[i].s>=a[l-1])//a[l-1]就是面试的分数线,因为下标是从0开始的,                //而名次是从1开始的,所以减1,            {                ans++;//ans就是面试成功的人数了                q[ll].k=f[i].k;//把面试成功的人数存在另一结构体数组里                q[ll++].s=f[i].s;            }        }         printf("%d %d\n",a[l-1],ans);         for(int i=0;i<ans;i++)         {             printf("%d %d\n",q[i].k,q[i].s);         }    }    return 0;}


原创粉丝点击