• Что не так в коде (Python3)?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Можно как dimonchik2013 предложил, а можно действительно сплитом и просто словарь использовать, set нужен только для отработки случая когда нужно с лексикографическим порядком разруливать.

    #!/usr/bin/env python3
    
    counts = dict()
    with open('input.txt', 'rt') as fin:
        for line in fin:
            for word in line.split():
                counts[word] = counts.get(word, 0) + 1
        max = 0
        max_word = set()
        for word, cnt in counts.items():
            if cnt > max:
                max_word = {word}
                max = cnt
            if cnt == max:
                max_word.add(word)
        with open('output.txt', 'wt') as fout:
            fout.write(min(max_word))


    Кстати у вас в коде нет ничего именно по поводу лексикографического порядка при выборе слова из списка (тех у которых максимальная встречаемость равна и максимальна).

    И еще: Файл одним чехом читать - не совсем правильно. В задаче он может и 1МБ, а в жизни может оказаться 1Тб - и вы сразу создадите краш с переполнением - не факт что этот краш нельзя использовать для взлома системы, например.
    Ответ написан
    Комментировать
  • Что не так в коде (Python3)?

    Sly_tom_cat
    @Sly_tom_cat
    .
    Без набора тестов - не понять какие не проходят.

    Кстати чтобы не считать количество итераций можно использовать под накопитель деталей которые нужно сделать - множество, а по окончанию алгоритма просто подсчитать число элементов в этом множестве.

    Да и в цикле - если вы идете по элементам списка то вам незачем идти по индексам, а потом получать элемент по индексу. Проще организовать цикл по самому списку тогда в переменной цикла у вас сразу будут элементы.

    Вот мой вариант вашего алгоритма (с озвученными выше изменениями):

    #!/usr/bin/env python3
    
    def do(n):
        tot.add(n)
        for i in arr[n-1]:
            if i not in tot:
                do(i)
    
    
    tot = set()
    arr = []
    for i in range(int(input())):
        arr.append(list(map(int,input().split())))
    do(1)
    print(len(tot))
    Ответ написан
    Комментировать