Ограничения: время – 500ms/1000ms, память – 256MiB Ввод: интерактивная задача Вывод: интерактивная задача
Послать решение Blockly Посылки Темы Где Обсудить (0)
Ватсон хочет научиться методу дедукции. Для обучения Шерлок использует
перемешанную случайным образом последовательность целых чисел от 1 до `N`, состоящих
ровно из `K` бит. Шерлок убирает одно из чисел, а Ватсон вслепую пытается определить,
какое из чисел пропало. Ватсон может проверить равенство двух битов одного числа или
соответствующих битов двух чисел. Гарантируется, что Шерлок выбирает такие `N` и `K`, которые позволяют однозначно определить пропавшее число. Задача оказалась слишком сложной для Ватсона,
поэтому напишите программу, выполняющую эту работу.
Протокол взаимодействия
При старте программа получает в первой строке ввода два целых числа: начальное
количество чисел `N` (`3\ ≤\ N\ ≤\ 1000`) и количество бит `K` (`log_2\ N\ <\ K\ ≤\ 10`).
Программа должна вывести запрос или сообщить, какое число пропало. После вывода программа
должна сделать принудительную запись буфера вывода (в C++ это делает endl, в C нужно
использовать fflush(stdout), в Pascal – flush(output)).
Допускаются два типа запросов:
"B `a\ i\ j`" – сравнение двух битов одного числа, где `a` (`1\ ≤\ a\ ≤\ N-1`) – номер числа,
`i,\ j` (`0\ ≤\ i,\ j\ ≤\ K-1`) – номера битов;
"С `a\ b\ i`" – сравнение `i`-х битов двух чисел, где `a,\ b` (`1\ ≤\ a,\ b\ ≤\ N-1`) – номера
чисел, `i` (`0\ ≤\ i\ ≤\ K-1`) – номер бита. 0-й бит является самым младшим.
После запроса программа получает результат проверки и может сделать очередной запрос
или сообщить, что пропавшее число было определено с помощью сообщения
"A `x`", где `x` – число от 1 до `N`. Если программа не найдет пропавшее число
за 2111 запросов, то программа получает вердикт "Неверный ответ".
Вывод программы
C 1 2 1
B 2 1 0
A 2