Возможность отправлять закодированные извещенья во время Второй мировой войны была довольно

Возможность отправлять закодированные извещенья во время Второй мировой войны была достаточно важной для союзников. Извещения всегда отчаливали после их кодировки при подмоги известного пароля. Иметь фиксированный пароль было опасно, потому появилась необходимость часто изменять его. Но следовало разработать механизм отправления нового пароля. У одного из математиков, работавших в криптографической команде, появилась умная идея - отправить пароль, скрытый в самом известьи. Занимательным моментом было то, что получателю известия довольно было знать только размер пароля, а позже отыскать его в приобретенном тексте.

Пароль размера n можно отыскать поиском в тексте наиболее часто встречаемой подстроки из n знаков. После нахождения пароля все подстроки совпадающие с ним, удаляются из текста. Теперь пароль можно использовать для расшифровки сообщения.

Однако Ваша задачка будет упрощена. Для вас довольно написать программку, которая по данному размеру пароля и закодированному известию отыщет пароль в согласовании с описанным выше алгоритмом.

Осмотрим пример, в котором размер пароля равен трем (n = 3), а текст сообщения имеет вид baababacb. Паролем будет aba, поэтому что размер этой подстроки 3, она возникает почаще всего во всем тексте (дважды), а другие 6 разных подстрок появляются только один раз (baa, aab, bab, bac, acb).

Технические условия

Входные данные

Состоит из нескольких тестов. Каждый тест представляет собой одну строку, в которой находится длина пароля n (0 lt; n 10) и закодированное извещенье. Известье содержит только строчные буковкы латинского алфавита, его длина не более 106 и не меньше n.

Выходные данные

Для каждого теста в отдельной строке следует вывести разыскиваемый пароль. Если существует несколько паролей, удовлетворяющих задаче, то вывести лексикографически меньший.

Задать свой вопрос
1 ответ
Type
    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.

, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт