首页 > 试题广场 >

淘汰分数

[编程题]淘汰分数
  • 热度指数:29706 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

某比赛已经进入了淘汰赛阶段,已知共有n名选手参与了此阶段比赛,他们的得分分别是a_1,a_2….a_n,小美作为比赛的裁判希望设定一个分数线m,使得所有分数大于m的选手晋级,其他人淘汰。

但是为了保护粉丝脆弱的心脏,小美希望晋级和淘汰的人数均在[x,y]之间。

显然这个m有可能是不存在的,也有可能存在多个m,如果不存在,请你输出-1,如果存在多个,请你输出符合条件的最低的分数线。

数据范围:
进阶:时间复杂度,空间复杂度

输入描述:

输入第一行仅包含三个正整数n,x,y,分别表示参赛的人数和晋级淘汰人数区间。(1<=n<=50000,1<=x,y<=n)

输入第二行包含n个整数,中间用空格隔开,表示从1号选手到n号选手的成绩。(1<=|a_i|<=1000)



输出描述:

输出仅包含一个整数,如果不存在这样的m,则输出-1,否则输出符合条件的最小的值。

示例1

输入

6 2 3
1 2 3 4 5 6

输出

3

来个短点的

n, x, y = map(int, input().split())
arr = list(map(int, input().split()))
arr.sort()
if y * 2 < n:
    print(-1)
else:
    i = n - y - 1
    if i + 1 < x:
        i = x - 1
    print(arr[i])
发表于 2023-03-18 03:14:24 回复(1)
n,x,y=map(int,input().split())
mark=list(map(int,input().split()))
mark.sort()

a=[i for i in range(x,y+1)]
for i in a:
    if x<=n-i<=y:
        print(mark[i-1])
        break
else:
    print(-1)


编辑于 2023-02-21 18:17:27 回复(0)
n, x, y = map(int, input().strip().split(' '))
scores = list(map(int, input().strip().split(' ')))
scores.sort()
# [1,2,3,4,5,6]  满足条件一:人数的一半6/2在【x,y】中,只有这样才能满足淘汰和晋级的人数有左右摆荡的空间 
if (n<2*x&nbs***bsp;n>2*y):#设置区间之外的不符合条件
    print(-1)#输出-1
else:
    #满足条件一
    for re in scores:
        a=len([i for i in scores if i<=re])
        b=len([j for j in scores if j>re])

        if (x<=a<=y and x<=b<=y):
            print(re)
            break#当有多个符合的分数时,取最小的

发表于 2022-04-17 17:37:05 回复(0)
a=list(map(int, input().strip().split()))
b=list(map(int, input().strip().split()))
b.sort()
x=a[1]
y=a[2]
print(b[x-1])

发表于 2021-10-16 15:42:08 回复(0)