首页 > 试题广场 >

分数线划定

[编程题]分数线划定
  • 热度指数:6152 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}某市为世博会选拔志愿者,先进行笔试,再按笔试成绩划定面试分数线。规则如下:
\hspace{23pt}\bullet\, 计划最终录取 m 名志愿者;
\hspace{23pt}\bullet\, 面试名额定为 m150\%,向下取整,记为 t=\left\lfloor 1.5m \right\rfloor
\hspace{23pt}\bullet\, 将所有报名号及笔试成绩按成绩从高到低、成绩相同报名号从小到大排序;
\hspace{23pt}\bullet\,t 名选手的成绩即为面试分数线
\hspace{23pt}\bullet\, 所有笔试成绩不低于该分数线的选手均进入面试。

\hspace{15pt}请输出面试分数线及所有进入面试选手的信息(按排序后的顺序)。

输入描述:
\hspace{15pt}第一行输入两个整数 n,m\left(5\leqq n\leqq 5000;\ 3\leqq m\leqq n\right),分别表示报名人数与计划录取人数。
\hspace{15pt}接下来 n 行,每行输入两个整数 k,s\ (1000\leqq k\leqq 9999;\ 1\leqq s\leqq 100),分别为报名号与笔试成绩。报名号保证唯一。


输出描述:
\hspace{15pt}第一行输出两个整数:面试分数线 \textit{line} 与进入面试的人数 cnt
\hspace{15pt}接下来 cnt 行,按排序顺序输出每位选手的报名号 k 与成绩 s,每行两个整数,用空格分隔。
示例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

说明

计算:t=\lfloor1.5\times3\rfloor=4,第 4 名成绩为 88,故分数线 =88;所有 \geqq88 的共有 5 人。
#n1:报名人数 n2:计划录取人数
n1,n2 = list(map(int,input().split(" ")))
t = int(n2 * 1.5)
grades = {}

for i in range(n1):
    k,s = list(map(int,input().split(" ")))
    grades[k] = s 

result = sorted(grades.items(),key=lambda x:(-1*x[1],x[0]))
line = result[t-1][1]
count = 0
result1 = []
for _,value in result:
    if value >=line:
        result1.append([_,value])
        count +=1 
print("{} {}".format(line,count))
for no,value in result1:
    print('{} {}'.format(no,value))

发表于 2025-12-04 01:50:27 回复(0)
while True:
    try:
        n, m = map(int, input().split())  # n:总人数, m:计划录取人数
        info = {}
        for _ in range(n):
            idx, score = map(int, input().split())
            info[idx] = score
        # 按规则排序:成绩降序,成绩相同时报名号升序
        sorted_items = sorted(info.items(), key=lambda x: (-x[1], x[0]))
        # 计算面试名额(向下取整)
        t = int(1.5 * m)  # Python的int()对于正数就是向下取整
        # 第t名选手的成绩就是面试分数线
        # 注意:列表索引从0开始,所以第t名对应索引t-1
        score_line = sorted_items[t - 1][1]
        # 所有成绩不低于分数线的选手均进入面试
        # 因为可能有多个同分选手,所以要用 >=
        qualified = {k: v for k, v in sorted_items if v >= score_line}
        # 输出结果
        print(score_line, len(qualified))
        for k, v in qualified.items():
            print(k, v)         
    except:
        break

发表于 2025-11-21 09:25:46 回复(0)
while True:
    try:
        dict1 = {}
        l = list(map(int,input().split()))
        # print(l[0]+l[1])
        for i in range(l[0]):
            z = list(map(int,input().split()))
            dict1[z[0]] = z[1]
        list1 = sorted(dict1.items(),key = lambda items:items[1],reverse=True)
        # print(list1)
        sorce_lost = []
        for key,values in dict1.items():
            sorce_lost.append(values)
        sorce_lit = sorted(set(sorce_lost),reverse=True)
        # print(sorce_lit)
        sorce = sorce_lit[2]
        # print(sorce)
   
       
        list3 = [i for i in list1 if i[1]>=sorce]
        # print(list3)
        print(f"{sorce} {len(list3)}")
        for i in list3:
            print(f'{i[0]} {i[1]}',end='\n')

    except:
        break
发表于 2025-10-13 12:24:48 回复(0)
import sys
inputs=[]
for line in sys.stdin:
    a = line.split()
    inputs.append(list(map(int,a)))

n=inputs[0][0]
m=inputs[0][1]
t=int(m*1.5)
p_dict={}
for i in range(n):
    p_dict[inputs[i+1][0]]=inputs[i+1][1]
keys=sorted(p_dict.keys())
values=sorted(p_dict.values())
score=values[-t]

s_dict={}
t_v=0
for k in keys:
    if p_dict[k] >=score:
        t_v+=1
        if p_dict[k] not in s_dict:
            s_dict[p_dict[k]]=[k]
        else: s_dict[p_dict[k]].append(k)

print(score,t_v)

for k in sorted(s_dict.keys())[::-1]:
    vs= s_dict[k]
    for v in vs:
        print(v,k)
发表于 2025-09-14 18:09:13 回复(0)
m,n = map(int,input().split())
dic = {}
for i in range(m):
    key,value = map(int,input().split())
    dic[key] = value

cnt = int(n*1.5) # 向下取整
dic_sort = sorted(dic.items(),key=lambda x:(-x[1],x[0])) # 排序,返回为二维列表

line = dic_sort[cnt-1][1]  # 分数线

# 统计分数线上有多少人
cnt = 0
for i in dic_sort:
    if i[1] >= line:
        cnt += 1
    else:
        break
print(line,cnt)

for i in range(cnt):
    print(dic_sort[i][0],dic_sort[i][1])
发表于 2025-09-11 08:05:49 回复(0)
import math
n,m=map(int,input().split())
c=[]
for _ in range(n):
    a,b=map(int,input().split())
    c.append([-b,a])#b.extend([a, b]) =[a,b],c.append([a,b])=[[a,b],]
c.sort()
for i in range(n):
    if c[i][0]<=0:
        c[i][0]=(-c[i][0])
d=math.floor(m*1.5) #m*1.5//1
f=c[d-1][0]
count =0
g=[]
for i in range(n):
    if c[i][0]>=f:
        count +=1
print(f"{f} {count}")
for i in range(count):
    print(f"{c[i][1]} {c[i][0]}")


发表于 2025-09-02 11:54:10 回复(0)
import math
n,m = map(int,input().split())
dic = {}
for i in range(n):
    k,s = map(int,input().split())
    dic[k] = s
sorted_dic = dict(sorted(dic.items(),key=lambda x:(x[1],-x[0]),reverse=True))
t = math.floor(1.5*m)
line = sorted_dic[list(sorted_dic.keys())[t-1]]
answer_dic = {}
for key in sorted_dic.keys():
    if sorted_dic[key]>=line:
        answer_dic[key] = sorted_dic[key]
    else:
        break
cnt = len(answer_dic.keys())

print(f'{line} {cnt}')
for key in answer_dic.keys():
    print(f'{key} {answer_dic[key]}')
发表于 2025-08-25 23:05:28 回复(0)