
Помогите пожалуйста срочно очень!!!!! Префиксное кодирование является очень распространенным
способом сжатия информации для ее хранения и передачи. Каждый символ кодируется некоторым кодовым словом — строкой из нулей и единиц. Кодовые слова могут иметь различную длину, но при этом должно выполняться следующее свойство: ни одно кодовое слово не начинается с другого кодового слова. Например, множество кодовых слов \{00,011,1000,11\}{00,011,1000,11} подходит для префиксного кодирования, а \{00,101,11,1010\}{00,101,11,1010} — нет, так как 101 является началом 1010. От вас требуется написать программу, которая найдет, какое максимальное количество кодовых слов заданной длины mm можно добавить к некоторому уже построенному множеству слов для префиксного кодирования. Например m=4m=4, и уже построено множество \{10,001,000,0111,11111,11000,111101\}{10,001,000,0111,11111,11000,111101}. Без нарушения условия префиксного кодирования можно добавить следующие слова длины 4: \{0100,0101,0110,1101,1110\}{0100,0101,0110,1101,1110}. Таким образом, ответ равен 5. Формат входных данных В первой строке на вход подается два натуральных числа nn и mm — количество уже известных кодовых слов и длина новых кодовых слов. m\leq 60m≤60. Во второй строке через пробел записано nn кодовых слов. Все слова состоят из нулей и единиц и удовлетворяют условию префиксного кодирования. Суммарная длина всех слов не превосходит 10^610 6 . Формат выходных данных Требуется вывести одно целое число — ответ к задаче. Ответ может быть равным нулю. Методика проверки Программа проверяется на 20 тестах. Прохождение каждого теста оценивается в 1 балл. При этом в трех тестах m\leq 10m≤10 и n\leq 100n≤100, еще в трех тестах длина всех заданных слов не превосходит mm, еще в четырех тестах длина всех заданных слов не меньше чем mm. Тест из условия задачи при проверке не используется. Sample Input: 7 4 10 001 000 0111 11111 11000 111101 Sample Output: 5

Ответы на вопрос

Ответ:Решай сам
Объяснение:
def rec(st,i=0):
global c,n,m
if i ==m:
c+=1
return
st0 = st +"0"
if st0 not in b:
rec(st0,i+1)
st1 = st + "1"
if sr1 not in b:
rec(st1,i+1)
n,m = map(int,input().split())
b = set(e[:m]for e in input().split())
c=0
rec("",0)
print(c)



Для решения этой задачи можно использовать алгоритм построения префиксного дерева (или бора). Префиксное дерево представляет собой дерево, в котором каждый узел представляет собой префикс кодового слова. Ребра из узла могут вести к следующим символам кодового слова.
Ваша задача заключается в том, чтобы определить, сколько новых кодовых слов длины `m` можно добавить к уже существующему множеству кодовых слов, не нарушив при этом условие префиксного кодирования.
Пример кода на Python для решения задачи:
```python class TrieNode: def __init__(self): self.children = {} self.is_end_of_word = False
def insert_word(root, word): node = root for char in word: if char not in node.children: node.children[char] = TrieNode() node = node.children[char] node.is_end_of_word = True
def count_prefix_words(root, m): count = 0 stack = [root] while stack: node = stack.pop() if node.is_end_of_word: count += 1 if len(node.children) == 1: child = list(node.children.values())[0] stack.append(child) return count
def main(): n, m = map(int, input().split()) words = input().split()
root = TrieNode() for word in words: insert_word(root, word)
result = count_prefix_words(root, m) print(result)
if __name__ == "__main__": main() ```
Пример входных данных: ``` 7 4 10 001 000 0111 11111 11000 111101 ```
Пример вывода: ``` 5 ```
Этот код строит префиксное дерево из уже существующих кодовых слов и подсчитывает количество новых кодовых слов длины `m`, которые можно добавить.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili