Задача 8*
Рассмотрим следующую последовательность двоичных строк:
S1 = 0; S2 = 01; S3 = 0110; · · · Sn+1 = Sn inv(Sn),
где inv(x) — операция инвертирования строки x, то есть замены всех нулей единицами и наоборот. Очевидно, что каждая строка в этой последовательности есть начало следующей строки. Таким образом, всякий раз дополняя строку результатом применения к ней операции инвертирования, можно получить такую бесконечную цепочку нулей и единиц, что любая строка Sn есть ее начало. Обозначим эту бесконечную цепочку S.
Для заданной двоичной строки T длиной от 1 до 32000 двоичных цифр требуется определить наименьшую позицию вхождения T в S, то есть найти наименьшую длину такой строки K, что KT есть начало S. При этом если T есть начало S, то позиция вхождения есть 0, если T встречается в S, начиная со второго символа, то позиция вхождения есть 1, и так далее.
Во входном файле находится не более 32000 символов 0 или 1, составляющих строку T. При этом все символы, отличные от 0 и 1, например, пробелы и переводы строки, могут встречаться в любых количествах, и при чтении входного файла их необходимо игнорировать.
В выходном файле в единственной строке должен находиться результат: наименьшая позиция вхождения T в S или слово NO, если T не встречается в S.
Пример:
Входной файл |
Выходной файл |
0011 |
5 |
Задача 7*
В газетах 1 апреля 2003 года сообщалось о кораблекрушения судна в Индийском океане. Пять человек и одна обезьянка спаслись на необитаемом острове. В первый день пребывания на острове они собирали кокосы. Среди ночи один из них проснулся и решил разделить кокосы. Он разделил кокосы на 5 равных частей. Однако остался 1 кокос, который он отдал обезьянке. Свою часть он взял с собой и пошел досыпать. Далее второй, третий, четвертый и пятый поступили аналогичным образом, и каждый раз оставался 1 кокос, который они с удовольствием отдавали обезьянке. Напрашивается вопрос: сколько было кокосов. Однако мы предлагаем решить несколько другую задачу (обратную).
Найдите максимально возможное число людей (если обезьянка всегда одна), которые могут проделать рассмотренную ночную операцию, при условии, что известно количество собранных кокосов.
Число собранных кокосов не превышает 5000000 штук.
В первой строке входного файла содержится целое число – количество собранных кокосов.
Выходной файл должен содержать целое число: максимальное количество людей, которые могут описанным образом разделить кокосы, в случае отсутствия решений в файл следует вывести 0.
Примеры:
Входной файл |
Выходной файл |
25 |
3 |
20 |
0 |
Задача 9*
Дед Мазай и заяц играют в очень простую игру. Перед ними – огромная куча из N одинаковых морковок. Каждый из них во время своего хода может взять из этой кучи любое количество морковок, равное неотрицательной степени числа 2, т.е. 1, 2, 4, 8,… . Начинает игру либо Дед Мазай, либо заяц. Затем игроки ходят по очереди. Тот, кто возьмет последнюю морковку, тот и выигрывает.
Требуется написать программу, которая при заданных исходных данных определяет победителя в этой игре. При этом следует учитывать, что игроки играют оптимально.
Входной файл содержит единственное целое положительное число N (N≤10250), задающее число морковок в начале игры.
Выходной файл должен содержать в первой строке цифру ‘1’, если выиграет тот, кто ходит первым, или цифру ‘2’ – в противном случае. Если игру выиграл тот, кто ходил первым, то во второй строке этого файла должно содержаться минимальное число морковок, которое должен взять игрок, выполнявший ход первым, чтобы гарантировать свою победу.
Пример
Входной файл |
Выходной файл |
8 |
1 2 |
