Codeforces Round 865 (Div. 1) |
---|
Закончено |
Это интерактивная задача.
Загадана перестановка $$$p_1, p_2, \dots, p_n$$$.
Рассмотрим неориентированный граф с $$$n$$$ вершинами и без рёбер. Вы можете делать два типа запросов:
Обратите внимание, что вы можете делать оба типа запросов в любом порядке.
Сделав $$$2n$$$ запросов (включая тип $$$1$$$ и тип $$$2$$$), угадайте две возможные перестановки, хотя бы одна из которых равна $$$p_1, p_2, \dots, p_n$$$. Ваш ответ будет засчитан, если хотя бы одна из перестановок верна. Вы можете вывести одну и ту же перестановку дважды.
Перестановкой длины $$$n$$$ является массив, состоящий из $$$n$$$ различных целых чисел от $$$1$$$ до $$$n$$$ в произвольном порядке. Например, $$$[2,3,1,5,4]$$$ — перестановка, но $$$[1,2,2]$$$ не перестановка ($$$2$$$ встречается в массиве дважды) и $$$[1,3,4]$$$ тоже не перестановка ($$$n=3$$$, но в массиве встречается $$$4$$$).
Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число $$$t$$$ ($$$1 \le t \le 100$$$) — количество наборов входных данных.
Первая строка каждого набора входных данных содержит единственное целое число $$$n$$$ ($$$2 \le n \le 10^3$$$) — длина перестановки.
Гарантируется, что сумма $$$n$$$ по всем наборам входных данных не превосходит $$$10^3$$$.
Взаимодействие для каждого набора входных данных начинается после считывания $$$n$$$.
Затем, сделайте не более $$$2n$$$ запросов:
В любой момент взаимодействия, если вы хотите угадать две перестановки, выведите «! $$$p_{1,1}$$$ $$$p_{1,2}$$$ $$$\dots$$$ $$$p_{1,n}$$$ $$$p_{2,1}$$$ $$$p_{2,2}$$$ $$$\dots$$$ $$$p_{2,n}$$$». Обратите внимание, что вы должны выводить две перестановки на одной и той же строке и без восклицательного знака между перестановками. После этого считайте $$$1$$$ или $$$-2$$$. Если вы считали $$$1$$$, то ваш ответ был правильным, иначе он был неправильным, и ваша программа должна немедленно завершиться, чтобы получить вердикт Неправильный ответ. После этого, перейдите к следующему набору входных данных, или завершите программу, если такого нет. Обратите внимание, что вывод ответа не считается как запрос.
Обратите внимание, что даже если вы вывели правильную перестановку, вторая перестановка должна быть именно перестановкой, а не произвольным массивом.
В любой момент, если вы продолжите взаимодействие после считывания числа $$$-2$$$, вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.
После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:
Интерактор является неадаптивным. Это означает, что все перестановки зафиксированы до начала взаимодействия.
Взломы
Чтобы сделать взлом, используйте следующий формат.
Первая строка должна содержать единственное целое число $$$t$$$ ($$$1 \le t \le 100$$$) — количество наборов входных данных.
Первая строка каждого набора входных данных должна содержать единственное целое число $$$n$$$ ($$$2 \le n \le 10^3$$$) — длину перестановки.
Вторая строка каждого набора входных данных должна содержать $$$n$$$ различных целых чисел $$$p_1, p_2, \ldots, p_n$$$ ($$$1 \le p_i \le n$$$) — загаданную перестановку.
Сумма $$$n$$$ по всем наборам входных данных не превосходит $$$10^3$$$.
2 6 1 1 1 1 1 2 -1 1 2 1
+ 12 + 2 + 3 ? 1 3 + 5 ? 1 5 ? 4 5 ! 1 4 2 5 3 6 1 2 3 4 5 6 ! 1 2 2 1
В первом наборе входных данных $$$n=6$$$ и загадана перестановка $$$p = [1,4,2,5,3,6]$$$.
Сначала сделаем запросы типа $$$1$$$ с $$$x=12, 2, 3$$$ соответственно. Это суммарно добавит в граф четыре ребра:
Поскольку все эти запросы корректны, интерактор вернул $$$1$$$ после каждого из них.
Затем спросим количество рёбер на кратчайшем пути между вершинами $$$p_1 = 1$$$ и $$$p_3 = 2$$$, которое равно $$$1$$$.
Затем сделаем запрос типа $$$1$$$ с $$$x=5$$$. Это суммарно добавит в граф четыре ребра:
Поскольку этот запрос корректен, интерактор вернул $$$1$$$.
Затем спросим количество рёбер на кратчайшем пути между вершинами $$$p_1 = 1$$$ и $$$p_5 = 3$$$, которое равно $$$2$$$.
Затем спросим количество рёбер на кратчайшем пути между вершинами $$$p_4 = 5$$$ и $$$p_5 = 3$$$. Такого пути не существует, поэтому интерактор вернёт $$$-1$$$.
После этого, благодаря некоторой магии, две возможные перестановки, которые могут быть равны $$$p$$$, определены: первая перестановка равна $$$[1,4,2,5,3,6]$$$, и вторая перестановка равна $$$[1,2,3,4,5,6]$$$. Так как первая перестановка равна загаданной перестановке, этот набор входных данных решён корректно. Всего $$$7$$$ запросов использовано, что находится в пределах $$$2 \cdot 6 = 12$$$ запросов.
Поскольку ответ правильный, интерактор вернул $$$1$$$.
Во втором наборе входных данных $$$n=2$$$ и загадана перестановка $$$p = [2,1]$$$.
Так как есть только $$$2! = 2$$$ возможные перестановки, никаких запросов не требуется. Достаточно просто вывести две перестановки $$$[1,2]$$$ и $$$[2,1]$$$. Всего $$$0$$$ запросов использовано, что находится в пределах $$$2 \cdot 2 = 4$$$ запросов.
Поскольку ответ правильный, интерактор вернул $$$1$$$.
Название |
---|