Top.Mail.Ru
Ответы

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

Вывод программы такой - пишет wrong answer. Код весь правилен, может со структрурой что то не так. Код тоже скинул на картинке

Код также скинул по ссылке со структурой - https://pastebin.com/QtTQeyxY

По дате
По рейтингу
Аватар пользователя
Новичок

Основная ошибка кода — отсутствие увеличения distances на ненулевых значениях.

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

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

Вот исправленный вариант:

12345678910111213141516171819202122232425
 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  
Аватар пользователя
Высший разум
1234
 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 и сначала написать