
Задача 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 |
Задача 21*
N гангстеров идут в ресторан. i-тый гангстер заходит в Ti-е время и имеет при себе Pi денег. Дверь ресторана имеет k+1 стадий открытия, выраженных в целых числах от 0 до k. Состояние открытия может измениться на 1 в единицу времени, т.е. либо открыться на 1, либо закрыться на 1, либо остаться прежним. В начальный момент состояние двери закрытое = 0.
i-тый гангстер может войти в ресторан, если дверь открыта специально для него, т.е. состояние двери совпадает с шириной его плеч Si. Если в момент времени, когда гангстер подошел к ресторану, состояние открытия двери не совпадает с шириной его плеч, то он уходит и никогда не возвращается. ресторан работает в интервале времени [0, T].
Цель: собрать в ресторане гангстеров с максимальным количеством денег.
Входные данные:
первая строка входного файла содержит значения N, R и T, разделенные пробелами (1 N 100, 1 K 100, 0 T 30000 );
вторая строка содержит моменты времени, в которые гангстеры подходят к ресторану T1, T2, ... , TN, разделенные пробелами (0 Ti T для i = 1, 2. ..., N);
в третьей строке записаны суммы денег каждого гангстера P1, P2, ... , PN, разделенные пробелами ( 0 Pi 300, для i = 1, 2. ..., N);
четвертая строка содержит значения ширины плеч каждого гангстера, разделенные пробелами (0 Si K для i = 1, 2. ..., N).
Все значения целые.
Выходные данные: В выходной файл выдать одно целое число — максимальное значение достатка всех гангстеров, собранных в ресторане. Если ни один гангстер не может попасть в ресторан, выдать 0.
Пример 1
Вход: Выход:
4 10 20 26
10 16 8 16
10 11 15 1
10 7 1 8
Пример 2
Вход: Выход:
2 17 100 0
5 0
50 33
6 1