| Codeforces Round 1022 (Div. 2) |
|---|
| Закончено |
Это интерактивная задача.
Вы нашли на чердаке числа $$$k$$$ и $$$n$$$, но потеряли два массива $$$A$$$ и $$$B$$$.
Вы помните, что:
К счастью, добрый дух, который поселился на чердаке, нашёл эти массивы и склеил их в массив $$$C$$$ длиной $$$n$$$. То есть сначала в массив $$$C$$$ были по очереди записаны элементы массива $$$A$$$, а затем — элементы массива $$$B$$$.
Вы можете задать доброму духу до $$$250$$$ вопросов. Каждый вопрос содержит индекс $$$i$$$ ($$$1 \leq i \leq n$$$). В ответ вы получите $$$i$$$-й элемент склеенного массива $$$C$$$.
Вам требуется найти длины массивов $$$A$$$ и $$$B$$$, либо сообщить, что это невозможно сделать однозначно.
Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 300$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.
Единственная строка каждого набора содержит два целых числа $$$n$$$ и $$$k$$$ ($$$1 \leq k \leq 50$$$, $$$2 k \leq n \leq 10^{6}$$$).
Обратите внимание, что сумма $$$n$$$ по наборам входных данных не ограничена.
Взаимодействие для каждого набора входных данных начинается с чтения целого числа $$$n$$$.
Затем вы можете сделать до $$$250$$$ запросов.
Чтобы сделать запрос, выведите строку в формате «? x» (без кавычек) ($$$1 \leq x \leq n$$$). После каждого запроса считайте целое число — ответ на ваш запрос.
Если вы сделаете слишком много запросов, то получите вердикт Wrong answer.
Чтобы сообщить ответ, выведите строку в формате «! a b» (без кавычек), где $$$a$$$ и $$$b$$$ — найденные вами длины массивов $$$A$$$ и $$$B$$$ соответственно. Ответ не учитывается при подсчёте количества запросов.
Если же невозможно однозначно определить длины массивов, выведите «! -1» (без кавычек). Обратите внимание, что если вы ответите $$$-1$$$ в то время, когда существует последовательность из не более чем $$$250$$$ запросов, которая однозначно определяет длины массивов, вы получите вердикт Wrong answer.
Гарантируется, что существуют такие не противоречащие условию массивы $$$A$$$ и $$$B$$$, для которых вывод интерактора корректен.
Интерактор не адаптивен, что означает, что ответ известен до того, как участник задаст запросы, и не зависит от запросов, заданных участником.
Если ваша программа сделает более $$$250$$$ запросов, ваша программа должна немедленно завершиться, чтобы получить вердикт Wrong answer. В противном случае вы можете получить произвольный вердикт, потому что ваше решение продолжит читать из закрытого потока.
После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт «IL» (Idleness limit exceeded). Для сброса буфера используйте:
Взломы
В этой задаче взломы отключены.
6 5 2 1 2 2 18 4 2 4 1 1 4 3 1 10 5 9 3 3 3 2 12 4 1 3 1 3 1 3
? 1 ? 2 ? 3 ! 2 3 ? 9 ? 13 ? 10 ? 14 ? 6 ! 9 9 ! -1 ! 5 5 ? 3 ? 6 ? 9 ! 6 3 ? 1 ? 2 ? 5 ? 6 ? 9 ? 10 ! -1
Рассмотрим первый пример. Мы запросили первые $$$3$$$ элемента из $$$5$$$. Теперь мы знаем, что массив $$$C$$$ выглядит как $$$[1, 2, 2, ?, ?]$$$. Мы точно знаем, что третий элемент не из массива $$$A$$$ — ведь по условию любые $$$k$$$ подряд идущих элементов (в нашем случае $$$k = 2$$$) в массиве $$$A$$$ различны. Значит, третий элемент точно расположен в массиве $$$B$$$. Получается, что длина массива $$$A$$$ равняется $$$2$$$, а длина массива $$$B$$$ — $$$3$$$.
На картинке показаны массивы из всех наборов тестовых данных. Жёлтым отмечены элементы, значения которых были запрошены.
| Название |
|---|


