Python

Python - Алгоритмы структур данных

Вывод программы такой - пишет wrong answer. Код весь правилен, может со структрурой что то не так. Код тоже скинул на картинке Код также скинул по ссылке со структурой - https://pastebin.com/QtTQeyxY
Основная ошибка кода — отсутствие увеличения distances на ненулевых значениях.

Помимо этого есть несколько мелких, но не менее значимых ошибок: расстояние для нулевого значения должно быть 0; return в nearest_zero_left стоит в цикле, то есть цикл выполнится ровно один раз; присваивание resultes производится только для ненулевых значений.

Всё это в сумме приводит к совершенно неверному результату.

Вот исправленный вариант:
 def nearest_zero_right(street_length, street_num): 
distances = None # Будет None, пока не найдём 0
resultes = [None] * street_length
for x in range(street_length):
n = street_num[x]
if n == 0:
distances = 0
else: #Иначе
if distances is not None: # Ноль найден, будем искать дистанцию
distances += 1
resultes[x] = distances
return resultes

def nearest_zero_left(street_length, street_num, resultes):
distances = None
for x in reversed(range(street_length)):
n = street_num[x]
if n == 0:
distances = 0
else: # Иначе
if distances is not None:
distances += 1
if resultes[x] is None or distances is not None and resultes[x] > distances:
resultes[x] = distances
return resultes
Majit Muradov
Majit Muradov
12 091
Лучший ответ
Володя Тархов Алексей подскажи пожалуйста, вот где ты сделал исправленный вариант оно работает, но ревьювер написал что надо сохранить индекс нулевого элемента, тогда не надо вызывать distances += 1, т.е distances = x это нулевой индекс.
Володя Тархов Он хочет чтоб я вызвал элемент нулевого индекса при этом не вызывая distances += 1 можешь помочь как можно что то с этим сделать. Я вот тут сам не понял как
 with open('input.txt', 'r') as f:
_, arr = f.readline(), list(map(int, f.readline().split()))
zeros = [i for i in range(len(arr)) if arr[i] == 0]
print(*[min(map(lambda x: abs(x - i), zeros)) for i in range(len(arr))])
Володя Тархов Пишет
ограничение по времени ограничено, по времени превышает
У тебя вывод программы на правильный вообще не похож. Где он весь правилен?
Проблема в том, что делаешь какую-то ерунду. Тут проще ctrl+a delete и сначала написать
Илюха
Илюха
34 940
Юрий Сюзев Это просто такая игра, называется "угадай, где не работает мой говнокод". Без постановки задачи, естественно. Здесь в неё часто играют.