Python挑战解决方案

时间:2018-02-15 12:07:12

标签: python

我参与了Python挑战,这个问题出现了,希望你能提供帮助。

输入

第1行: N,选择的参赛者数量

第二行: P,问题数量

第3行: P整数,每个问题的难度

第4行: C参赛者人数

第5行: C整数,每位参赛者的能力

参赛者可以解决难度不高于其能力的问题

输出

Print 'yes'如果我们能找到前N名选手,else print 'no'

示例

输入: 1 2 5 10 3 5 9 10

输出: 'yes'

我的尝试:

if __name__ == '__main__':
    N = int(input())  
    P = int(input())  
    P_diff = list(map(int, input().split())) 
    assert len(P_diff) == P
    C = int(input())  
    exp = list(map(int, input().split()))
    assert len(exp) == C
    assert not N > C

    a = 0 
    for k in P_diff:
        for l in exp:
            while l >= k:
                a += 1

    if C - a == N:
        print('yes')
    else:
        print('no')

1 个答案:

答案 0 :(得分:0)

在我对您的问题的理解中,我对您的代码进行了一些更改,只需尝试并检查它是否符合您的要求:

N = int(input())
P = int(input())
P_diff = list(int(input()) for i in range(P))
assert len(P_diff) == P
C = int(input())
exp = list(int(input()) for j in range(C))
assert len(exp) == C
assert not N > C
a = 0
a = sum([a+1 for x in P_diff for y in exp if x >= y])
if a >= N:
    print('yes')
else:
    print('no')

如果它可以满足您的需求,我们可以对此代码进行更改并使其更有效。

更新:

如果你想在一行中获取该数组的元素,你可以这样做:

P_diff = [int(i) for i in input().split()]
print(P_diff)

输入如:5 10 11并打印如下:

[5, 10, 11]

编辑:

如果您希望首先在一行中提供所有输入,请执行以下操作:

li = [int(i) for i in input().split()]
print(li)


N = li[0]
P = li[1]
P_diff = list(li[i] for i in range(2, 2+P))
assert len(P_diff) == P
C = li[2+P]
exp = list(li[j] for j in range(3+P, 3+P+C))
assert len(exp) == C
assert not N > C
a = 0
a = sum([a+1 for x in P_diff for y in exp if x >= y])
if a >= N:
    print('yes')
else:
    print('no')

在这里您可以输入如下的输入:1 2 5 10 3 5 9 10在一行中(不要像''一样给出字符串)