Олимпиадный тренинг

Задача . E. XOR-угадайка


Это интерактивная задача. Не забывайте о том, что ваша программа должна каждый раз после вывода запроса сбрасывать буфер вывода. Для сброса буфера вывода можно использовать fflush(stdout) в C++, system.out.flush() в Java, stdout.flush() в Python или flush(output) в Pascal. Если вы используете другой язык программирования, посмотрите в его документации, как выполняется эта операция. Также рекомендуем вам прочесть руководство по интерактивным задачам: https://cf.m27.workers.dev/blog/entry/45307.

Мы загадали целое число \(x\), не меньше \(0\) и не больше \(2^{14} - 1\). Вы должны угадать это число.

Для этого вы можете задать не более \(2\) запросов. Каждый запрос должен состоять из \(100\) целых чисел \(a_1\), \(a_2\), ..., \(a_{100}\) (каждое число должно быть не меньше \(0\) и не больше \(2^{14} - 1\)). В ответ на запрос мы выберем целое число \(i\) (\(1 \le i \le 100\)) и сообщим вам значение \(a_i \oplus x\) (побитовое исключающее ИЛИ чисел \(a_i\) и \(x\)). Все \(200\) чисел, которые вы используете в запросах, обязательно должны быть различны.

Гарантируется, что значение \(x\) в каждом тесте зафиксировано, но выбор числа \(i\) в каждом запросе может зависеть от того, какие числа вы посылаете.

Выходные данные

Чтобы дать ответ на задачу, ваша программа должна отправить одну строку \(!\) \(x\) с переводом строки в конце. После этого программа должна сбросить буфер вывода и завершиться.

Протокол взаимодействия

До того, как ваша программа даст ответ, она может отправить не более \(2\) запросов. Чтобы отправить запрос, выведите строку следующего формата: \(?\) \(a_1\) \(a_2\) ... \(a_{100}\), где каждое \(a_j\) должно быть целым числом из отрезка \([0, 2^{14} - 1]\). Строка, которую вы отправляете, должна заканчиваться символов перевода строки. После отправки запроса программа должна сбросить буфер вывода и прочитать ответ на запрос — значение \(a_i \oplus x\) для некоторого \(i \in [1, 100]\). Никакое число не должно быть использовано в запросах дважды, ни в пределах одного и того же запроса, ни в разных запросах.

Если вы зададите некорректный запрос (или же количество запросов превысит \(2\)), ответом будет число \(-1\). Если ваша программа получила такой ответ, она должна немедленно завершиться — иначе вы можете получить вердикт «Ошибка исполнения», «Превышено ограничение времени» или какой-нибудь другой, а не «Неправильный ответ».

Примечание

Пример взаимодействия не является корректным — вы должны отправить ровно \(100\) целых чисел в каждом запросе. Все остальное корректно.

Взломы в этой задаче запрещены.


Примеры
Входные данныеВыходные данные
1 0
32
? 3 5 6
? 32 24 37
! 5

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя