首页 > 试题广场 >

知识竞赛

[编程题]知识竞赛
  • 热度指数:2333 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
最近部门要选两个员工去参加一个需要合作的知识竞赛,每个员工均有一个推理能力值 ,以及一个阅读能力值 。如果选择第 个人和第 个人去参加竞赛,那么他们在阅读方面所表现出的能力为 ,他们在推理方面所表现出的能力为
现在需要最大化他们表现较差一方面的能力,即让 尽可能大,问这个值最大是多少。

进阶:时间复杂度,空间复杂度

输入描述:
第一行一个正整数 ,代表员工数。
接下来  行每行两个正整数 ,分别用来描述第  个员工的推理和阅读能力。



输出描述:
仅一行一个一位小数用来表示答案。
示例1

输入

3
2 2
3 1
1 3

输出

2.0

说明

选择第一个和第二个员工或第一个和第三个时,较差方面的能力都是 \text 1.5,选择第二个和第三个时较差方面能力是 \text 2
while True:
    try:
        n = int(input().strip())
        info = []
        for i in range(n):
            L = list(map(int, input().strip().split()))
            info.append(L)
        info.sort(key=lambda x: x[0], reverse=True)
        max_mean = min(info[0][0] + info[1][0], info[0][1] + info[1][1])
        store = [0, 1]
        if info[0][1] + info[1][1] > info[0][0] + info[1][0]:
            print((info[0][0] + info[1][0]) / 2)
        else:
            for i in range(2, len(info)):
                if info[i][1] < min(info[store[0]][1], info[store[1]][1]):
                    continue
                else:
                    A = min(info[store[0]][0] + info[i][0], info[store[0]][1] + info[i][1])
                    B = min(info[store[1]][0] + info[i][0], info[store[1]][1] + info[i][1])
                    if A > max_mean:
                        store[0] = i
                        max_mean = A
                    elif B > max_mean:
                        store[1] = i
                        max_mean = B
                    else:
                        continue
            print(max_mean / 2)

    except EOFError:
        break
发表于 2022-09-25 22:00:32 回复(0)
n = int(input())
ab = []
for i in range(n):
    ab.append(list(map(int, input().split())))
res = 0
ab.sort(key = lambda x:abs(x[1]-x[0]))
maxa = ab[0][0]
maxb = ab[0][1]
for a,b in ab:
    if a>b:
        res = max((b+maxb)/2,res)
    else:
        res = max((a+maxa)/2,res)
    if a>maxa:
        maxa = a
    if b>maxb:
        maxb = b
print(res)
根据第一的思路加个python版本

发表于 2021-07-30 10:35:08 回复(2)