QOJ.ac

QOJ

実行時間制限: 4.0 s メモリ制限: 2048 MB 満点: 100 インタラクティブ

#17326. Ограбление века

統計

После планирования самого изощренного ограбления с целью кражи Королевской драгоценности графа Монте-Карло, вы столкнулись с последним препятствием на своем пути: запертым сейфом. Однако вы тренировались именно для этого момента и отточили свои навыки взломщика.

У сейфа есть $N$ дисков, каждый из которых можно установить в любое целое значение от $1$ до $2N$. Граф Монте-Карло настроил сейф, задав правильное секретное значение для каждого диска. Чтобы попытаться открыть сейф, вы устанавливаете каждый диск в выбранное вами значение, а затем поворачиваете ручку двери сейфа. Если каждый диск установлен в свое правильное секретное значение, вы не почувствуете сопротивления, и дверь откроется немедленно.

Конечно, открыть сейф, случайно угадав все правильные секретные значения, крайне маловероятно. Однако, как опытный взломщик, даже если ваша догадка неверна, вы чувствуете некоторое сопротивление при попытке открыть дверь, и можете использовать это знание, чтобы расшифровать правильные секретные значения. Если диск имеет секретное значение $h$, а при попытке открыть дверь диск установлен в значение $d$, диск окажет сопротивление $|h - d|$ при повороте ручки двери. Вы можете почувствовать максимальное сопротивление среди всех дисков. (Заметьте, что если это значение равно $0$, вы успешно открыли сейф и завершили ограбление!)

К сожалению, служба безопасности узнала о вашем присутствии и приближается к вашему местоположению. Вы можете сделать одну попытку открыть сейф в секунду, но они будут здесь через $4N$ секунд! Сможете ли вы завершить ограбление до того, как вас поймают?

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

Это интерактивная задача. Взаимодействие начинается с чтения целого числа $N$ ($1 \le N \le 500$) из стандартного потока ввода — количества дисков на сейфе. Ваша программа может сделать до $4N$ попыток открыть дверь сейфа, указывая значение для каждого диска сейфа. После каждой попытки вам будет сообщено сопротивление, которое вы почувствовали от ручки двери.

Чтобы сделать попытку, выведите строку, содержащую $N$ целых чисел $d_1, d_2, \dots, d_N$ ($1 \le d_i \le 2N$), разделенных пробелами — значения, которые вы предлагаете для каждого диска. Затем прочитайте одно целое число из стандартного потока ввода, представляющее сопротивление, которое вы почувствовали от ручки двери, $\max_i |h_i - d_i|$, где $h_i$ — (неизвестное вам) секретное значение диска $i$. Если сопротивление равно $0$, вы открыли сейф, и ваша программа должна завершиться. В противном случае, если у вас остались попытки, вы можете попробовать снова.

Если у вас закончатся попытки, ваша программа должна корректно завершиться (хотя она будет оценена как неверная за неспособность взломать сейф вовремя, чтобы скрыться от охраны).

Секретное значение каждого диска было настроено графом Монте-Карло до начала ограбления и не будет меняться в ответ на ваши попытки взлома.

Примечание

Не забудьте очистить выходной поток после каждой выведенной строки и корректно завершить работу после окончания взаимодействия. Пожалуйста, убедитесь, что вы точно следуете приведенному выше протоколу взаимодействия относительно того, какую информацию выводить на какой строке: например, если протокол требует вывести список целых чисел, разделенных пробелами, на одной строке, судья не примет каждое число на отдельной строке.

Если судья получит неверные или неожиданные входные данные, он выведет $-1$ и немедленно завершит работу. Ваша программа должна обнаружить этот отчет об ошибке и корректно завершиться, чтобы получить вердикт «Неправильный ответ» (Wrong Answer). Если ваша программа заблокируется в ожидании дальнейшего взаимодействия от судьи или попытается интерпретировать $-1$ как значение сопротивления, вы можете получить другой вердикт (например, «Превышение времени выполнения» (Time Limit Exceeded) или «Ошибка времени выполнения» (Runtime Error)) вместо «Неправильного ответа».

Вам предоставлен инструмент командной строки для локального тестирования. Инструмент содержит комментарии в начале, объясняющие его использование.

Примеры

Пример 1

Чтение Запись
3
1 1 1
5
3 4 5
1
4 5 6
0

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.