При подаче он дает runtime_error - PullRequest
0 голосов
/ 23 января 2020
t=int(input())

while t>0 :

    c=0

    n,h,y1,y2,e = list(map(int, input().split()))
    for i in range(n):

        x0,x1 = list(map(int, input().split()))    
        if x0==1 :
            if x1 < h-y1:
                e -= 1
        else :
            if y2 < x1 :
                e -= 1
        if e>0 :
            c+=1    
        else :
            break
    print(c)

    t-=1

Он передает примеры тестовых примеров, но при отправке показывает, что произошла ошибка времени выполнения (NZE C).

Вот ссылка на вопрос: https://www.codechef.com/problems/PIPSQUIK

1 Ответ

1 голос
/ 23 января 2020

Проблема в том, что вы читаете входные данные и обрабатываете их одновременно. Таким образом, в некоторых тестовых случаях может возникнуть ситуация, когда e<=0, но у вас еще есть x0 x1 для чтения (т.е. i<n-1). В таких случаях вы будете break l oop, потому что e<=0 и на следующей итерации while l oop вы попытаетесь прочитать 5 значений n,h,y1,y2,e = list(map(int, input().split())), но получите только 2 значения x0 x1 и, следовательно, он выдаст ValueError: not enough values to unpack (expected 5, got 2) и, следовательно, он не пройдет все тестовые случаи.

Чтобы исправить это, просто сначала возьмите все входные данные, а затем обработайте их в соответствии с текущими логиками. c.

t=int(input())

while t>0 :

    c=0

    n,h,y1,y2,e = list(map(int, input().split()))
    inputs = []
    for i in range(n):
        inputs.append(list(map(int, input().split())))
    for inp in inputs:

        x0,x1 = inp
        if x0==1 :
            if x1 < h-y1:
                e -= 1
        else :
            if y2 < x1 :
                e -= 1
        if e>0 :
            c+=1
        else :
            break
    print(c)

    t -= 1
...