01. Старые шахматы (20 баллов) ограничение времени на тест: 0.5 сек. Однажды Николай, роясь на чердаке своего дома, нашел старые шахматы. К сожалению, в наборе были только белые фигуры, и, видимо, количество их было неправильно. Николай знает, что правильный набор фигур одного цвета состоит из следующих фигур: одного короля одного ферзя двух ладей двух коней двух слонов восьми пешек Николай хочет знать, сколько фигур ему надо удалить или добавить в набор белых, чтобы он стал правильным. Входные данные Входной файл содержит единственную строку, на которой расположено 6 чисел, разделенных пробелами, — количество королей, ферзей, ладей, коней, слонов и пешек в наборе, найденном Николаем. Все числа во входном файле целые и находятся в отрезке от нуля до десяти. Выходные данные Выведите шесть чисел — количество фигур каждого типа, которые следует добавить или удалить из набора, чтобы он стал правильным. Если нужно добавить фигуры данного типа к набору, то соответствующее им число должно быть положительно, если убрать — отрицательно. Пример(ы) input.txt output.txt 0 1 2 2 2 7 1 0 0 0 0 1 input.txt output.txt 2 1 2 1 2 1 -1 0 0 1 0 7 02. Мышь (25 баллов) ограничение времени на тест: 0.5 сек. Операционная система "Berwin XP" обрабатывает нажатия клавиши мыши следующим образом. Если подряд (без паузы) идет два нажатия клавиши мыши, то она объединяет их в "двойной щелчок" (double click). В противном случае нажатие интерпретируется как одиночный щелчок. Нажатие будем обозначать символом "С", а паузу - символом "P". Например, последовательность действий "ССPCPPCCC" воспримется системой как двойной щелчок, затем одинарный, затем двойной и снова одинарный. Ваша задача написать программу, которая анализирует последовательность действий. Входные данные Во входном файле содержится строка, состоящая из символов "С" и "P". Длина строки не превосходит 100 символов. Строка содержит хотя бы один символ. Несколько пауз может идти подряд, паузы могут как начинать, так и заканчивать последовательность действий. Выходные данные В первую строку выведите общее количество щелчков. Во вторую строку выведите последовательность чисел 1 и 2 через пробел. Число 1 соответствует одинарному щелчку, 2 двойному. Порядок вывода щелчков соответствует порядку их совершения. Пример Ввод CCPCPPCCC Вывод 4 2 1 2 1 03. Зашифрованное письмо (40 баллов) ограничение времени на тест: 0.5 сек. Кот в сапогах, который заведовал королевской почтой, отправил маркизу де Карабасу зашифрованное письмо. В письме использовались только большие латинские буквы и пробелы. Шифрование осуществлялось по следующему правилу: сначала Кот составил строку - "ключ" шифра, выглядющую следующим образом: "ABBCCCDDDDEEEEE...ZZZ...ZZZ". Затем он в своём письме заменил все буквы номерами какого-либо вхождения соответствующей буквы в строку-ключ (позиции в "ключе" нумеруются с единицы). Каждый пробел Кот заменил символом '/' (ASCII код 47). Напишите программу, которая сможет расшифровать письмо мудрого Кота. Входные данные Во входном файле содержатся натуральные числа, пробелы и символы '/'. Длина входной строки не превосходит 10000 символов. Выходные данные В выходной файл выведите расшифрованную строку. Пример(ы) input.txt output.txt 1 2 1/4 1 2 1 ABA CABA 04. Доминошки (50 баллов) ограничение времени на тест: 2 сек. Вам задан набор разноцветных доминошек. Каждая доминошка состоит из двух половинок, каждая из которых окрашена в некоторый цвет. Перекраска в любой цвет одной половинки любой доминошки занимает одну секунду. Найдите минимальное необходимое время для такой перекраски, после которой все доминошки станут одинаковы. При сравнении доминошки разрешается поворачивать. Входные данные Первая строка входного файла содержит положительное целое число N (1 <= N <= 5000) количество доминошек. В следующих N строках заданы описания доминошек по одному в строке. Каждое описание -- это номера цветов половинок доминошки. Цвета нумеруются от 0 до 9999. Выходные данные Выведите наименьшее время, необходимое для перекраски. Пример Ввод Test #1 6 0 0 1 1 0 0 1 2 0 2 1 2 Test #2 2 1 2 2 3 Вывод Test #1 6 Test #2 1 05. Экзамен (60 баллов) ограничение времени на тест: 0.5 сек. Экзамен по берляндскому языку проходит в узкой и длинной аудитории. На экзамен пришло N студентов. Все они посажены в ряд. Таким образом, позиция каждого человека задается координатой на оси Ox (эта ось ведет вдоль длинной аудитории). Два человека могут разговаривать, если расстояние между ними меньше или равно D. Какое наименьшее количество типов билетов должен подготовить преподаватель, чтобы никакие два студента с одинаковыми билетами не могли разговаривать? Выведите способ раздачи преподавателем билетов. Входные данные В первой строке входного файла содержится два целых числа N, D (1 <= N <= 10000; 0 <= D <= 10^6). Вторая строка содержит последовательность различных целых чисел X1, X2,..., XN, где Xi (0 <= Xi <= 10^6) обозначает координату вдоль оси Ox i-го студента Выходные данные В первую строку выведите Q - наименьшее количество типов билетов, необходимых для проведения экзамена. Во вторую строку выведите последовательность N целых чисел от 1 до Q. i-ое число этой последовательности обозначает номер типа билета i-го студента. Если ответов несколько, выведите любой. Пример Ввод Test #1 4 1 11 1 12 2 Вывод Test #1 2 1 2 2 1 Test #2 4 0 11 1 12 2 Test #2 1 1 1 1 1 Test #3 4 100 11 1 12 2 Test #3 4 1 3 2 4 06. Оптимальный поиск данных (75 баллов) ограничение времени на тест: 1 сек. Хранилище данных на некотором сервере организовано как таблица, у которой 2 строки и N столбцов. В каждой клетке таблицы хранится информация о некотором объекте. Каждый объект, хранимый в таблице, характеризуется своим уникальным идентификатором, который является целым числом. Пронумеруем верхнюю строку таблицы числом 0, а нижнюю - числом 1. Также пронумеруем столбцы таблицы слева направо от 0 до N-1 и обозначим через Ai,j идентификатор объекта, хранимого в клетке на пересечении i-й строки и j-го столбца. Известно, что данные хранятся в таблице в определенном порядке. А именно, выполняются следующие неравенства: 1. A0, j < A1, j для всех j от 0 до N-1 включительно. 2. A0, j < A0, j+1 для всех j от 0 до N-2 включительно. 3. A1, j < A1, j+1 для всех j от 0 до N-2 включительно. Вы разрабатываете клиентское приложение, одна из функций которого заключается в поиске данных в хранилище. Другими словами, по идентификатору некоторого объекта приложение должно определять, есть ли в хранилище объект с таким идентификатором или нет. Общение Вашего приложения с сервером происходит следующим образом. Приложение отправляет на сервер запрос, содержащий числа i, j и X. Здесь i и j - это номера строки и столбца в таблице, а X - это идентификатор объекта, поиск которого осуществляется. В ответ сервер посылает число -1, если Ai, j < X; число 0, если Ai, j = X; число 1, если Ai, j > X. В принципе, никакого ограничения на количество запросов, отправляемых приложением на сервер, не существует. Однако, так как отправка запроса и ожидание ответа сервера процесс не очень быстрый, Вы заинтересованы в том, чтобы количество запросов, затрачиваемых в худшем случае на поиск одного объекта, было минимальным. Напишите программу, получающую на вход число N и возвращающую количество запросов, затрачиваемых в худшем случае на поиск одного объекта, при оптимальной организации процесса поиска. Входные данные Во входном файле записано единственное натуральное число N (1 ≤ N ≤ 50). Выходные данные Выведите единственное целое число, равное минимальному количеству запросов, затрачиваемых в худшем случае на поиск одного объекта в хранилище. Пример(ы) input.txt output.txt 1 2 input.txt output.txt 2 3 input.txt output.txt 5 5