printРабочее место участника

printЗадачи

2338. Метод дедукции

Ограничения: время – 500ms/1000ms, память – 256MiB Ввод: интерактивная задача Вывод: интерактивная задача copy
Послать решение 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 запросов, то программа получает вердикт "Неверный ответ".

Пример ввода

3 2
0
1

Вывод программы

C 1 2 1
B 2 1 0
A 2
loading