Служба безопасности страны :)
От: olimp_20  
Дата: 12.12.17 18:43
Оценка:
Подскажите: какая идея решения? Я начал "копать" в сторону суффиксных деревьев. Может есть боллее лучший подход к решению?

Служба безопасности страны Унляндия получила интересный сигнал с космического пространства, который можно представить в виде последовательности из 0 и 1. Перед работниками этой службы сразу возник вопрос: каким-то образом декодировать это сообщение. Перед декодированием было решено проанализировать полученную последовательность. Оценка заключалась в том, чтобы в указанной последовательности из 0 и 1 найти такие подпоследовательности, которые повторяются чаще.
Ограничения:
а) количество символов в подпоследовательности должна буди в пределах от А до В включительно.
б) искомых последовательностей должно быть не более N.
Входные данные
Входной файл содержит Числа А, В, N, каждое из которых записано в новой строке. Четвертую строчку содержит само сообщение, запись которого заканчивается цифрой 2. Размер входного файла не более 2 Мб.
1≤A≤12, 1≤B≤12, 1≤N≤20
формат результата
Исходный файл содержит не более N строк, в каждой из которых записаны через пробел следующие данные:
1. Количество вхождений найденной подпоследовательности (подпоследовательностей, если несколько разных встречаются одинаковое количество раз).
2. Сама последовательность (подпоследовательности записаны через пробел, без дублирования).
Сортировка:
* По строкам первыми указать подпоследовательности, которые встречаются чаще всего и далее по убыванию.
* Если найдено несколько подпоследовательностей, в которых одинаковое количество вхождений, то первыми указать те, в которых большее количество символов. Если количество символов одинакова, то первыми указать те, которые встречаются ранее при чтении сообщения слева направо.
input.txt
4
5
4
11111111111111011100111111111111111112

output.txt
25 1111
23 11111
2 1110 0111
1 11110 11101 11100 11011 11001 10111 10011 01111 01110 00111 1101 1100 1011 1001 0011
Re: Служба безопасности страны :)
От: Chorkov Россия  
Дата: 13.12.17 09:01
Оценка: +1
Здравствуйте, olimp_20, Вы писали:

_>Подскажите: какая идея решения? Я начал "копать" в сторону суффиксных деревьев. Может есть боллее лучший подход к решению?


Обрати внимание:
_>1≤A≤12, 1≤B≤12

Т.е. подпоследовательности длинной не более 2^12 . Вполне можно завести массив счетчиков такой длинны, и "в лоб" .
Позицию первого вхождения, (для сортировки результатов) выполним вторым проходом массива.

Сложность O(2^(B))+O(длинна последовательности)

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