Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2023, 14:27   #1
Ezio50
 
Регистрация: 21.04.2023
Сообщений: 6
По умолчанию Python, Yes or No

Дан набор строк из нулей и единиц. Необходимо проверить есть ли бесконечный текст из единиц и нулей, чтобы никакая строка из набора запрещённых не встречается в тексте в виде подстроки.
Входные данные:
1-ая строка - одно целое число X(кол-во запрещённых подстрок)
Следующие строки - слово(обязательно есть символы) из 0 и 1, которое является запрещённой подстрокой.
Вывод:
YES - бесконечный текст существует
NO - бесконечный текст не существует

Код:
class Node:
    def __init__(self, symbol=None):
        self.symbol = symbol
        self.next = {}
        self.link = None
        self.out = set()
        self.is_term = False


def add_word(root, word):
    node = root
    for symbol in word:
        if symbol not in node.next:
            node.next[symbol] = Node(symbol)
        node = node.next[symbol]
    node.is_term = True
    node.out.add(word)


def build_automation(words):
    root = Node()
    for word in words:
        add_word(root, word)
    queue = [root]
    while queue:
        node = queue.pop(0)
        for symbol, child in node.next.items():
            queue.append(child)
            link = node.link
            while link and symbol not in link.next:
                link = link.link
            child.link = link.next[symbol] if link and symbol in link.next else root
            child.out |= child.link.out
    return root


def has_cycle(words):
    root = build_automation(words)
    visited = set()
    stack = [(root, None)]
    while stack:
        node, parent = stack.pop()
        if (node, parent) in visited:
            return True
        visited.add((node, parent))
        for child in node.next.values():
            if child != parent:
                stack.append((child, node))
    return False


n = int(input())
words = [input().strip() for _ in range(n)]
if has_cycle(words):
    print("NO")
else:
    print("YES")
Мой вариант кода, но не понимаю в чём ошибка, проходит только 2-ой тест
Тесты:
3
01
11
00000
No
3
011
11
0000
YES

Последний раз редактировалось Ezio50; 25.04.2023 в 14:33.
Ezio50 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Python - как установить Easy-Machine-Learning-Object-Detection при уже установленном Python 3.9 Krasi Общие вопросы по программированию, компьютерный форум 4 23.12.2021 15:49
[Python] Нужно решить в среду вечером 5 -6 заданий для начинающих на языку Python. Пример заданий смогу выслать. Задания на английском языке. foxylen Фриланс 2 17.03.2019 12:30
Начальный уровень Python. Функции - Python YYYUUU Python 5 09.06.2017 12:09
Python Astron Свободное общение 1 31.03.2010 23:11