#python #runtime
#python #время выполнения
Вопрос:
Kattis отклонил четыре попытки отправить скрипт Python 3 для «Putovanje», указав в качестве причины только «ошибку времени выполнения». Он отлично работает в VSCode с тремя тестовыми примерами, которые я встроил в него, а также с примерами из самого Kattis. Однако это может означать, что Kattis использует более хитрый набор входных данных.
Онлайн-ресурсы направляют меня к следующим решениям: «… не должно иметь возвращаемого значения, равного нулю …» (что я исправил, альтернативно удалив строку возврата из плодотворной функции «ответ» или назначив вызов переменной в main (т. Е. Функции «решение»)) или»… используйте блок try / except, чтобы избежать запроса входных данных после EOF …» (я включил его в новейшие версии моего кода, здесь ). Затем я использовал Python Tutor для визуализации кода еще в нескольких тестовых примерах, таких как 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10 чтобы убедиться, что все циклы идут к завершению. Кстати, использование метода списка fruits.remove() меня немного беспокоит, поскольку длина списка сокращается при каждом последующем удалении, но пока все мои тестовые примеры не превысили емкость списка.
Чего мне здесь не хватает, что Kattis продолжает улавливать?
Примечание: моя тестовая функция вызывается только через терминал, через «python putovanje.py test» — в противном случае эта функция игнорируется.
Вот описание Kattis: https://open.kattis.com/problems/putovanje
И вот мой код:
# Module requests
import sys
def answer(fruits, C, N):
loop = int(0)
# marker is the desired end result
count = int(0)
sum = int(0)
marker = int(0)
it = int(0)
#loops over successive indices
for iterator2 in range(len(fruits)):
#loops over available indices
for iterator in range(len(fruits)):
if ((sum fruits[iterator] <= C)):
sum = sum fruits[iterator]
count =1
# stores largest count
if (count > marker):
marker = count
count = int(0)
sum = int(0)
loop =1
if (loop == N):
break
#advances iterator
fruits.remove(fruits[it])
# print and return maximum fruits count
print(marker)
return marker
def solution():
C = int(0)
N = int(0)
i = int(0)
elem = int(0)
# Read in total number of fruits (list length)
N = int(input())
# Read in total amount of weight (list length)
C = int(input())
fruits = []
# Read in fruit weights to list by append loop
for i in range(N):
try:
elem=int(input())
except EOFError: #stackoverflow.com
break
fruits.append(elem)
# computes desired result
marker = answer(fruits, C, N)
def test():
#local test cases
berries = [1,2,4,2,1]
mushrooms = [1, 1000, 1]
nuts = [10,9,8,7,6,5,4,3,2,1]
assert answer(berries, 5, 5) == 3
assert answer(mushrooms, 1000, 3) == 2
assert answer(nuts, 10, 10) == 4
print("All test cases passed.")
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == 'test':
test()
else:
solution()
Ответ №1:
Существует проблема с обработкой вашего ввода. Он считывает всю строку ввода сразу, поэтому вам нужно разделить эту строку и присвоить ее переменным.
N, C = map(int, input().split())
fruits = [int(x) for x in input().split()]