eolymp
bolt
Try our new interface for solving problems
Problems

Угадайте перестановку

Угадайте перестановку

Дана перестановка, которая состоит из $n$ ($n$ --- степень двойки) чисел. Порядок элементов в перестановке вам неизвестен. Перестановка~--- это последовательность длины $n$ целых чисел от $1$ до $n$, в которой все числа встречаются ровно по одному разу. Например, $[1]$, $[4, 3, 5, 1, 2]$, $[3, 2, 1]$~--- перестановки, а $[1, 1]$, $[4, 3, 1]$, $[2, 3, 4]$~--- нет. Также имеется следующий запрос: Вы даете массив $a$ длины $n$, такой что $1 \le a_i \le n$ (заметьте, что $a$ \textbf{не} обязательно является перестановкой). В ответ Вы получаете массив $c$ длины $n$, который генерируется следующим образом: \begin{verbatim} c = массив длины n из нулей for i = 1 to n: if p[a[i]] > p[i]: c[a[i]] += 1 вернуть c \end{verbatim} Вам следует найти заданную перестановку $p$. Максимальное количество запросов смотрите в параграфе <<Оценивание>>. \InputFile Первая строка содержит два целых числа $t$ и $q$ ($1 \le t, q \le 256$)~--- количество наборов входных данных и максимальное количество запросов, которые можно использовать в каждом наборе входных данных. \Interaction Для каждого набора входных данных сначала следует прочитать целое число $n$ ($1 \le n \le 1024$) --- количество элементов в перестановке $p$. Гарантируется, что $n$ является степенью двойки (то есть такое целое неотрицательное число $k$, что $2^k=n$). Для совершения запроса выведите <<1 $a_1$ $a_2$ \dots $a_n$>> ($1 \le a_i \le n$). В ответ на запрос программа жюри выведет массив $c$, полученный по правилу из условия, в следующем формате: <<$c_1$ $c_2$ \dots $c_n$>>. После вывода запроса не забудьте вывести символ новой строки и сбросить буфер вывода. В противном случае вы получите вердикт \t{Исчерпан лимит времени}. Для сброса буфера используйте: \begin{itemize} \item \t{fflush(stdout)} или \t{cout.flush()} в C++; \item \t{System.out.flush()} в Java; \item \t{flush(output)} в Pascal; \item \t{stdout.flush()} в Python; \end{itemize} смотрите документацию для других языков. Обратите внимание, что если ваш запрос недействителен (лимит запросов превышен или входной массив не устраивает ограничением), интерактор выведет <<-1>> и прекратит работу. Если вы считаете <<-1>>, то немедленно завершите программу, чтобы получить вердикт \t{Неверный ответ} вместо произвольного вердикта. Когда вы найдете перестановку $p$, выведите <<2 $p_1$ $p_2$ \dots $p_n$>>. После этого, если это был последний набор входных данных, Вы должны завершить работу своей программы, в противном случае Вы должны продолжить работу по следующим набором входных данных. \Note Из первого запроса узнали что $p_1<p_3<p_4<p_2$. Таким образом искомая перестановка имеет вид: $[1, 4, 2, 3]$. \Scoring $q$ --- максимальное количество запросов, которое может использовать Ваша программа. \begin{enumerate} \item ($3$ балла) $n \le 16, q=256, t=128$ \item ($7$ баллов) $n \le 32, q=256, t=128$ \item ($8$ баллов) $n \le 256, q=256, t=128$ \item ($14$ баллов) $n \le 512, q=256, t=128$ \item ($20$ баллов) $n \le 512, q=128, t=256$ \item (до $48$ баллов) $n \le 1024, q=127, t=256$; Пусть $k$ --- максимальное количество запросов, которое Вы использовали в одном наборе данных. Тогда результат за этот тест будет равен: \end{enumerate} \begin{itemize} \item $0$ баллов, если $k > 127$; \item $48- \lceil \frac{24(k-55)}{37}\rceil $ баллов, если $55 < k \le 127$; \item $48$ баллов, если $k \le 55$; \end {itemize} \Example \begin{example} \exmp{1 256 4 0 1 1 1}{ 1 3 2 4 2 2 1 4 2 3} \end{example}
Time limit 30 seconds
Memory limit 256 MiB
Author Kostya Denisov
Source 2021 Ukrainian Olympiad in Informatics, Stage IV, Round I