| Codeforces Round 1008 (Div. 1) |
|---|
| Закончено |
Это интерактивная задача.
Существуют два скрытых целых неотрицательных числа $$$x$$$ и $$$y$$$ ($$$0 \leq x, y \lt 2^{30}$$$). Вы можете задать не более $$$2$$$ запросов следующего вида.
После этого жюри даст вам другое целое неотрицательное число $$$m$$$ ($$$0 \leq m \lt 2^{30}$$$). Вы должны ответить правильным значением $$$(m \mathbin{|} x) + (m \mathbin{|} y)$$$.
Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 10^4$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.
Жюри выбирает два скрытых целых числа $$$x$$$ и $$$y$$$ ($$$0 \leq x, y \lt 2^{30}$$$). Обратите внимание, что $$$x$$$ и $$$y$$$ могут быть разными для разных наборов входных данных.
Интерактор в этой задаче не адаптивен. Другими словами, целые числа $$$x$$$ и $$$y$$$ не меняются в процессе взаимодействия.
Чтобы задать вопрос, выберите целое число $$$n$$$ ($$$0 \leq n \lt 2^{30}$$$) и выведите $$$n$$$ на отдельной строке.
Вы получите одно целое число — значение$$$(n \mathbin{|} x) + (n \mathbin{|} y)$$$.
Вы можете задать не более $$$2$$$ вопросов данного вида.
После того как вы закончите свои вопросы, выведите «!» на отдельной строке. Вы получите целое число $$$m$$$ ($$$0 \leq m \lt 2^{30}$$$). Обратите внимание, что значение $$$m$$$ также фиксировано до начала взаимодействия.
Вы должны вывести только значение $$$(m \mathbin{|} x) + (m \mathbin{|} y)$$$ на отдельной строке. Обратите внимание, что эта строка не считается запросом и не учитывается при подсчете количества заданных запросов.
После этого переходите к следующему набору входных данных.
Если вы сделаете более $$$2$$$ запросов во время взаимодействия, ваша программа должна немедленно завершиться, и вы получите вердикт Неправильный ответ. В противном случае вы можете получить произвольный вердикт, потому что ваше решение продолжит чтение из закрытого потока.
После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для этого используйте:
Взломы
Чтобы совершить взлом, следуйте формату теста ниже.
Первая строка содержит количество наборов $$$t$$$ ($$$1 \le t \le 10^4$$$). Описание наборов следует далее.
Первая и единственная строка каждого набора содержит три целых числа $$$x, y, m$$$ ($$$0 \leq x, y, m \lt 2^{30}$$$).
2 3 4 1 0 1
0 1 ! 4 0 ! 2
В первом наборе входных данных взаимодействие происходит следующим образом.
| Решение | Жюри | Объяснение |
| $$$\texttt{2}$$$ | В тесте 2 набора. | |
| $$$\texttt{}$$$ | В первом наборе $$$x=1$$$ и $$$y=2$$$. | |
| $$$\texttt{0}$$$ | $$$\texttt{3}$$$ | Решение запрашивает $$$(0 \mathbin{|} 1) + (0 \mathbin{|} 2)$$$, и жюри отвечает $$$3$$$. |
| $$$\texttt{1}$$$ | $$$\texttt{4}$$$ | Решение запрашивает $$$(1 \mathbin{|} 1) + (1 \mathbin{|} 2)$$$, и жюри отвечает $$$4$$$. |
| $$$\texttt{!}$$$ | $$$\texttt{1}$$$ | Решение запрашивает значение $$$m$$$, и жюри отвечает $$$1$$$. |
| $$$\texttt{4}$$$ | Решение знает, что $$$(1 \mathbin{|} x) + (1 \mathbin{|} y)=4$$$ из предыдущих запросов. | |
| $$$\texttt{}$$$ | Во втором наборе $$$x=0$$$ и $$$y=0$$$. | |
| $$$\texttt{0}$$$ | $$$\texttt{0}$$$ | Решение запрашивает $$$(0 \mathbin{|} 0) + (0 \mathbin{|} 0)$$$, и жюри отвечает $$$0$$$. |
| $$$\texttt{!}$$$ | $$$\texttt{1}$$$ | Решение запрашивает значение $$$m$$$, и жюри отвечает $$$1$$$. |
| $$$\texttt{2}$$$ | Решение каким-то образом узнаёт, что $$$x=y=0$$$, поэтому отвечает $$$(1 \mathbin{|} 0) + (1 \mathbin{|} 0)=2$$$. |
Обратите внимание, что пустые строки в примерах ввода и вывода приведены для ясности и не встречаются в реальном взаимодействии.
| Название |
|---|


