QOJ.ac

QOJ

Time Limit: 3.0 s Memory Limit: 256 MB Total points: 100 Hackable ✓

#17679. Велогонка

Statistics

В соревновании участвуют $N$ велосипедистов $1, \dots, N$. Каждый велосипедист обладает уникальным уровнем мастерства от $1$ до $N$, и при встрече двух велосипедистов всегда побеждает тот, у кого уровень мастерства выше.

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

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

Определите уровни мастерства, используя оптимальное количество соревнований, или используйте $N$ соревнований для получения части баллов.

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

Каждый тест содержит несколько наборов входных данных. Взаимодействие начинается со строки, содержащей единственное целое число $T$ ($1 \le T \le 10^4$), количество наборов входных данных.

Каждый набор входных данных начинается со строки, содержащей единственное целое число $N$ ($3 \le N \le 300$), количество велосипедистов.

Далее вы можете проводить соревнования. Чтобы провести соревнование, выведите строку «? $a_1$ $a_2$ $\dots$ $a_n$», где $a_k$ означает, что велосипедист $a_k$ находится на $k$-й позиции в списке. Список $a_1, \dots, a_n$ должен быть перестановкой чисел $1, \dots, n$.

Ответом на ваш запрос будет строка «$r_1$ $r_2$ $\dots$ $r_n$», где $r_k$ удовлетворяет условию $0 \le r_k < n$. Если $r_k > 0$, это означает, что велосипедист на $k$-й позиции выбыл в раунде $r_k$ соревнования. Если $r_k = 0$, то этот велосипедист выиграл соревнование.

Как только вы определили уровни мастерства велосипедистов, выведите строку «! $s_1$ $s_2$ $\dots$ $s_n$», где $s_k$ должно быть равно уровню мастерства велосипедиста $k$.

Если вы сделаете некорректный запрос или попытаетесь провести более $N$ соревнований, ваше решение получит вердикт Wrong Answer. Кроме того, если набор уровней мастерства, который вы вывели, отличается от набора, задуманного интерактором, ваше решение получит вердикт Wrong Answer. В обоих случаях взаимодействие немедленно завершится. В противном случае вы получите баллы в соответствии с разделом «Подзадачи».

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

Подзадачи

Для каждого набора входных данных пусть $q$ — количество проведенных вами соревнований. Кроме того, для каждого $N$ пусть $c_N$ — минимальное количество соревнований, необходимое для гарантированного определения уровней мастерства.

Вы получите 100 баллов, если $q \le c_N$ для всех наборов входных данных. В противном случае вы получите 10 баллов. Обратите внимание, что при ограничениях задачи для получения 10 баллов необходимо, чтобы $q \le N$ для всех наборов входных данных.

Примеры

Входные данные 1

1
5

Выходные данные 1

? 1 2 3 4 5
3 2 1 0 1
? 1 3 5 2 4
3 1 2 1 0
? 1 4 2 5 3
3 0 1 2 1
? 1 5 4 3 2
3 1 0 1 2
! 4 2 1 5 3

Примечание

В примере уровни мастерства велосипедистов равны $4, 2, 1, 5, 3$ соответственно.

В первом проведенном соревновании велосипедисты выстроены в список $[1, 2, 3, 4, 5]$. Соревнование проходит следующим образом; в каждом раунде показан список велосипедистов, где выбывшие заменены на $X$.

  • В раунде 1:
    • Велосипедист на позиции 3 (велосипедист 3 с уровнем 1) проигрывает велосипедистам на позициях 2 и 4 (велосипедисты 2, 4 с уровнями 2, 5) и выбывает.
    • Велосипедист на позиции 5 (велосипедист 5 с уровнем 3) проигрывает велосипедистам на позициях 4 и 1 (велосипедисты 4, 1 с уровнями 5, 4) и выбывает.
    • Велосипедист на позиции 1 (велосипедист 1 с уровнем 4) побеждает велосипедистов на позициях 5, 2 (велосипедисты 5, 2 с уровнями 3, 2) и поэтому не выбывает.
    • Велосипедист на позиции 2 (велосипедист 2 с уровнем 2) побеждает велосипедиста на позиции 3 (велосипедист 3 с уровнем 1) и поэтому не выбывает.
    • Велосипедист на позиции 4 (велосипедист 4 с уровнем 5) побеждает велосипедистов на позициях 3, 5 (велосипедисты 3, 5 с уровнями 1, 3) и поэтому не выбывает.
  • В раунде 2 список велосипедистов: $[1, 2, X, 4, X]$.
    • Велосипедист на позиции 2 проигрывает велосипедистам на позициях 1 и 4 и выбывает.
    • Велосипедист на позиции 1 побеждает велосипедиста на позиции 2 и поэтому не выбывает.
    • Велосипедист на позиции 4 побеждает двух других велосипедистов и поэтому не выбывает.
  • В раунде 3 список велосипедистов: $[1, X, X, 4, X]$.
    • Велосипедист на позиции 1 проигрывает велосипедистам на позициях 4 и 4 (которые являются одним и тем же велосипедистом) и выбывает.
    • Велосипедист на позиции 4 побеждает велосипедиста на позиции 1 и поэтому не выбывает.

Следовательно: Велосипедист на позиции 1 выбыл в раунде 3. Велосипедист на позиции 2 выбыл в раунде 2. Велосипедист на позиции 3 выбыл в раунде 1. Велосипедист на позиции 4 выиграл соревнование. * Велосипедист на позиции 5 выбыл в раунде 1.

Что дает ответ на запрос $[3, 2, 1, 0, 1]$.

Во втором проведенном соревновании велосипедисты выстроены в список $[1, 3, 5, 2, 4]$. Соревнование проходит следующим образом:

  • В раунде 1:
    • Велосипедист на позиции 2 (велосипедист 3 с уровнем 1) проигрывает велосипедистам на позициях 1 и 3 (велосипедисты 1, 5 с уровнями 4, 3) и выбывает.
    • Велосипедист на позиции 4 (велосипедист 2 с уровнем 2) проигрывает велосипедистам на позициях 3 и 5 (велосипедисты 5, 4 с уровнями 3, 5) и выбывает.
    • Велосипедист на позиции 1 (велосипедист 1 с уровнем 4) побеждает велосипедиста на позиции 2 (велосипедист 3 с уровнем 1) и поэтому не выбывает.
    • Велосипедист на позиции 3 (велосипедист 5 с уровнем 3) побеждает велосипедистов на позициях 2, 4 (велосипедисты 3, 2 с уровнями 1, 2) и поэтому не выбывает.
    • Велосипедист на позиции 5 (велосипедист 4 с уровнем 5) побеждает велосипедистов на позициях 4, 1 (велосипедисты 2, 1 с уровнями 2, 4) и поэтому не выбывает.
  • В раунде 2 список велосипедистов: $[1, X, 5, X, 4]$.
    • Велосипедист на позиции 3 проигрывает велосипедистам на позициях 1 и 5 и выбывает.
    • Велосипедист на позиции 1 побеждает велосипедиста на позиции 3 и поэтому не выбывает.
    • Велосипедист на позиции 5 побеждает двух других велосипедистов и поэтому не выбывает.
  • В раунде 3 список велосипедистов: $[1, X, X, X, 4]$.
    • Велосипедист на позиции 1 проигрывает велосипедистам на позициях 5 и 5 (которые являются одним и тем же велосипедистом) и выбывает.
    • Велосипедист на позиции 5 побеждает велосипедиста на позиции 1 и поэтому не выбывает.

Следовательно: Велосипедист на позиции 1 выбыл в раунде 3. Велосипедист на позиции 2 выбыл в раунде 1. Велосипедист на позиции 3 выбыл в раунде 2. Велосипедист на позиции 4 выбыл в раунде 1. * Велосипедист на позиции 5 выиграл соревнование.

Что дает ответ на запрос $[3, 1, 2, 1, 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.