首页 > 试题广场 >

[NOIP2009]分数线划定

[编程题][NOIP2009]分数线划定
  • 热度指数:354 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
世博会志愿者的选拔工作正在 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)。数据保证选手的报名号各不相同。


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

输入

6 3
9848 90
6731 88
1422 95
7483 84
8805 95
4162 88

输出

88 5
1422 95
8805 95
9848 90
4162 88
6731 88

说明

m*150% = 3*150% = 4.5,向下取整后为 4。保证4个人进入面试的分数线为88,但因为88有重分,所以所有成绩大于等于 88 的选手都可以进入面试,故最终有 5 个人进入面试
头像 月下八哥
发表于 2021-01-21 15:38:49
水题啊!!!用结构体存储数据,然后排序。排完序之后要算出录取的人数。注意:录取m*150%(向上取整)的人数以后,他的下一位可能也是这个分数。(我第一次没通过就在这)上代码吧: #include<bits/stdc++.h> using namespace std; struct st 展开全文
头像 ziuch
发表于 2020-08-21 00:17:03
题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终 展开全文
头像 19-hanhan
发表于 2020-05-30 09:54:20
题目 题目描述: 世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试。 笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定。 即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取 展开全文
头像 savage
发表于 2019-09-07 17:26:55
算法知识点: 模拟,排序,多关键字排序 复杂度: 解题思路: 先将所有同学按分数高者优先、序号小者优先进行双关键字排序。 然后求出分数线:即排名在 的同学的分数。 最后找出成绩大于等于分数线的同学人数。 C++ 代码: #include < 展开全文
头像 天才制杖
发表于 2023-07-22 12:17:11
简单说下思路 首先创建二维数组或结构体数组(可能这个好写点),这里采用递归排序法(因为是在递归那一章里的题),必须先对编号进行排序(这样才能输出正确),再对笔试成绩进行排序。 笔试及格进面试的人数中,最后一名成绩都是一样的,只需要判断成绩是否一致,一致人数就+1。 然后输出即可。 小白一枚,题目挺简 展开全文
头像 丹323327
发表于 2020-02-01 17:59:11
知识点:结构体排序 题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选 展开全文
头像 牛客986661833号
发表于 2021-09-06 21:35:53
不知道自己错哪了,来个大佬解释一下,谢谢 include include include include<bits/stdc++.h> using namespace std;int main(){int n,m;cin>>n>>m;int fin=floor(m 展开全文
头像 青笙
发表于 2022-01-15 16:50:38
解决此题的关键在于,如何对数据进行排序。首先阅读题目可知,我们可以对考生编号和分数装入一个二维数组中,再利用Math.floor()对面试录取的名额数进行向下取整,再利用一个数组获取二维数组中分数,将分数进行sort()排序,在对数组进行反转,使数组中的分数按照从大到小的顺序排列。再通过比较即可得到 展开全文
头像 牛客875000507号
发表于 2020-01-21 12:16:59
#include<bits/stdc++.h> using namespace std; struct viewer { int no; //考号。 int scr; //分数。 }vr[5000]; bool cmp(viewer a,view 展开全文
头像 三大爷的剑
发表于 2021-10-08 15:23:27
技巧     快排    堆排    二分 思路     1找到排名为m的分数是多少。     2根据排名第m人的分数,截取所有合格的人。     3 展开全文