Гена атакует
(Время: 1 сек. Память: 16 Мб Сложность: 28%)
Это интерактивная задача.
Программа-троян по имени Гена заразила ваш компьютер и теперь хочет поиграть с вами в игру. Гена загадал некоторое целое число X (0 ≤ X < 216) и хочет, чтобы вы его угадали, иначе вирус распространится по сети. Вы можете задавать Гене вопросы вида «? Y», где Y – целое число (0 ≤ Y < 216). После этого Гена выписывает своё и ваше числа в двоичном представлении, считает количество разрядов, в которых числа различаются, и сообщает это количество вам.
Как только вы посчитали, что знаете загаданное число, выведите сообщение «! Y», означающее, что Y – и есть это число. После вывода этого запроса общение с Геной прекращается. Также не забывайте, что Гена ответит не более чем на 20 вопросов.
Протокол взаимодействия
После каждого запроса «?» вашей программе будет сообщено в новой строке количество разрядов (в двоичном представлении), в которых ваше число отличается от загаданного.
Вы должны выводить корректные запросы в формате, описанном выше. Последним должен следовать единственный запрос вида «!», после чего ваша программа должна немедленно завершиться.
Ваша программа должна произвести не больше 20-ти запросов типа «?». Обратите внимание, что последний запрос, выводящий ответ, не входит в данные 20 запросов.
Пример
№ | стандартный ввод | стандартный вывод |
1 | 1 4 0 | ? 3 ? 8 ? 7 ! 7 |
Примечание
Для корректной работы программы после каждой операции вывода данных выводите перевод строки, а также очищайте буфер вывода. Очистка буфера вывода производится следующим образом:
- В языке Pascal: flush(output)
- В С/С++: fflush(stdout) или cout.flush()
- В Java: System.out.flush()
- В Python: sys.stdout.flush() из библиотеки sys
- В C# и Basic: Console.Out.Flush()
Для отправки решения задачи необходимо зарегистрироваться и авторизоваться!
|