Автор: | A. Usmanov | Ограничение времени: | 1 сек | |
Ввод / вывод: | интерактивный | Ограничение памяти: | 256 Мб |
Данная задача является интерактивной.
Жюри загадало секретное целое число X, состоящее из ровно N бит. Известно, что в этом числе есть K единичных бит (и N − K нулевых бит). Ваша программа может делать запросы вида "+ Y", которые к текущему значению числа X будет прибавляют целое число Y. При этом биты старше N-о отбрасываются, то есть выполняется операция вида X = (X + Y) mod 2N.
На каждый запрос программа жюри отвечает количеством единичных бит в текущем значении X. Требуется определить текущее значение числа X, сделав не более ⌊ N2⌋ запросов.
В первой строке входных данных записано два целых числа N и K — общее количество бит в числе и количество единичных бит в начальном значении соответственно.
Чтобы сделать запрос, ваша программа должна вывести "+ Y
",
где Y — целое число, которое нужно прибавить к X.
На каждый запрос программа жюри ответит целым числом —
количеством единичных бит в числе X после выполнения запроса.
Когда ваша программа определит текущее значение X, она должна вывести "! X
"
и завершиться.
Если ваша программа сделает недопустимый запрос, то она получит вердикт "Presentation error". Если ваша программа превысит допустимое количество запросов, то она получит вердикт "Wrong answer".
Каждый запрос и вывод окончательного результата должен быть одиночной строкой
заканчивающейся одиночным переводом строки (\n
).
Буфер вывода необходимо сбрасывать после каждой строки:
Язык | C++ | Pascal | Java | Python |
Код | cout.flush() |
flush(output) |
System.out.flush() |
stdout.flush() |
1 ≤ N ≤ 60
0 ≤ K ≤ N
0 ≤ X, Y < 2N
В первом примере было загадано число 13 (1101 в двоичной системе счисления). После выполнения первого запроса получилось (13 + 9) mod 16 = 6 (01102). После выполнения второго запроса получилось (6 + 9) mod 16 = 15 (11112).
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
2 |
|
|