HDU---Problem B

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 3
1000 90
3239 88
2390 95
7231 84
1005 95
1001 88

Sample Output

88 5
1005 95
2390 95
1000 90
1001 88
3239 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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值