eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

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

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

Дано перестановку, яка складається з $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$>>. Після цього, якщо це був останній набір вхідних даних, ви повинні завершити роботу своєї програми, в іншому випадку ви повинні продовжити роботу з наступним набором вхідних даних. \Example \begin{example} \exmp{1 256 4 0 1 1 1}{ 1 3 2 4 2 2 1 4 2 3} \end{example} \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}
Ліміт часу 30 секунд
Ліміт використання пам'яті 256 MiB
Автор Kostya Denisov