Возможность отправлять закодированные извещенья во время Второй мировой войны была довольно
Возможность отправлять закодированные извещенья во время Второй мировой войны была достаточно важной для союзников. Извещения всегда отчаливали после их кодировки при подмоги известного пароля. Иметь фиксированный пароль было опасно, потому появилась необходимость часто изменять его. Но следовало разработать механизм отправления нового пароля. У одного из математиков, работавших в криптографической команде, появилась умная идея - отправить пароль, скрытый в самом известьи. Занимательным моментом было то, что получателю известия довольно было знать только размер пароля, а позже отыскать его в приобретенном тексте.
Пароль размера n можно отыскать поиском в тексте наиболее часто встречаемой подстроки из n знаков. После нахождения пароля все подстроки совпадающие с ним, удаляются из текста. Теперь пароль можно использовать для расшифровки сообщения.
Однако Ваша задачка будет упрощена. Для вас довольно написать программку, которая по данному размеру пароля и закодированному известию отыщет пароль в согласовании с описанным выше алгоритмом.
Осмотрим пример, в котором размер пароля равен трем (n = 3), а текст сообщения имеет вид baababacb. Паролем будет aba, поэтому что размер этой подстроки 3, она возникает почаще всего во всем тексте (дважды), а другие 6 разных подстрок появляются только один раз (baa, aab, bab, bac, acb).
Технические условия
Входные данные
Состоит из нескольких тестов. Каждый тест представляет собой одну строку, в которой находится длина пароля n (0 lt; n 10) и закодированное извещенье. Известье содержит только строчные буковкы латинского алфавита, его длина не более 106 и не меньше n.
Выходные данные
Для каждого теста в отдельной строке следует вывести разыскиваемый пароль. Если существует несколько паролей, удовлетворяющих задаче, то вывести лексикографически меньший.
piece = record
value: string[10];
count := 1;
end;
var
pieces: array[1..200]of piece;
i, j, n, pieces_n: integer;
s, p: string;
found: boolean;
imax:=1;
begin
read(s);
read(n);
for i := 1 to length(s) - n + 1 do
begin
p := Copy(s, i, n);
found := false;
for j := 1 to pieces_n do
if pieces[j].value = p then begin
pieces[j].count := pieces[j].count + 1;
found := true;
if pieces[imax].count lt; pieces[j].count then
imax := j;
break;
end;
if not found then begin
pieces_n := pieces_n + 1;
pieces[pieces_n].value := p;
end;
end;
writeln(pieces[imax].value);
end.
-
Вопросы ответы
Статьи
Информатика
Статьи
Математика.
Разные вопросы.
Разные вопросы.
Математика.
Разные вопросы.
Математика.
Физика.
Геометрия.
Разные вопросы.
Обществознание.