QOJ.ac

QOJ

Límite de tiempo: 4 s Límite de memoria: 512 MB Puntuación total: 100 Dificultad: [mostrar] Interactivo

#1815. Leniwy sędzia

Estadísticas

To zadanie interaktywne.

Sędziowie pracują nad strategią programu jurorskiego dla zmodyfikowanej wersji zadania J z bieżących zawodów.

W tym zadaniu Alice potajemnie wymyśla permutację pierwszych $N$ liczb całkowitych $a_1, a_2, \dots, a_N$ i podaje $N$ Bobowi. Bob zadaje pytania, aby zidentyfikować tę permutację. Alice może zmieniać permutację w trakcie procesu, o ile jest ona zgodna z jej poprzednimi odpowiedziami.

Sędziowie planują stworzyć AliceBot, który będzie działał w następujący sposób.

Istnieją dwie fazy: faza pytań i faza odpowiedzi.

W fazie pytań sędzia podaje AliceBot liczbę całkowitą $N$. Następnie AliceBot musi odpowiedzieć na pytania zadawane przez sędziego dotyczące permutacji.

W kolejnej fazie odpowiedzi AliceBot musi utworzyć dwie różne permutacje $a_1, \dots, a_N$ oraz $b_1, \dots, b_N$, które są zgodne z odpowiedziami z poprzedniej fazy.

Sędzia zadający pytania posiada początkową cierpliwość $P = 2N$. Każde zadane przez sędziego pytanie zmniejsza jego cierpliwość.

Sędzia może zadać trzy rodzaje pytań:

  • Typ 1, sformatowany jako "? 1 i j k": sędzia wybiera trzy różne liczby całkowite $i, j, k$ ($1 \le i, j, k \le N$), AliceBot patrzy na trzy liczby $a_i, a_j$ oraz $a_k$ i podaje Bobowi wartość ich mediany (tę, która nie jest ani minimum, ani maksimum). Każde takie pytanie zmniejsza cierpliwość sędziego o 2.
  • Typ 2, sformatowany jako "? 2 i j": sędzia wybiera dwie różne liczby całkowite $i, j$ ($1 \le i, j \le N$) i AliceBot odpowiada $i$, jeśli $a_i < a_j$, lub $j$ w przeciwnym razie. Każde takie pytanie zmniejsza cierpliwość sędziego o 2.
  • Typ 3, sformatowany jako "? 3 i j": sędzia wybiera dwie różne liczby całkowite $i, j$ ($1 \le i, j \le N$) i AliceBot podaje minimalną wartość spośród $a_i$ oraz $a_j$. Każde takie pytanie zmniejsza cierpliwość sędziego o 1.

Możesz założyć, że cierpliwość sędziego nigdy nie spadnie poniżej 2 po zadaniu pytania. Gdy sędzia uzna, że zadał wystarczającą liczbę pytań, do AliceBot wysyłana jest komenda "!", co przełącza go w fazę odpowiedzi.

W fazie odpowiedzi AliceBot podaje sędziemu dwie permutacje $a_1, \dots, a_N$ oraz $b_1, \dots, b_N$. Te dwie permutacje muszą być zgodne ze wszystkimi odpowiedziami udzielonymi w fazie pytań, a liczba pozycji $i$, dla których $a_i \neq b_i$, musi wynosić co najmniej $\lceil p/2 \rceil$, gdzie $p$ to cierpliwość sędziego na koniec fazy pytań.

Ponieważ sędzia jest zbyt leniwy, Twoim zadaniem jest zaimplementowanie AliceBot. Można wykazać, że problem jest rozwiązywalny dla każdego możliwego $N$ z podanych ograniczeń.

Interakcja

Najpierw program jurorski podaje liczbę całkowitą $N$ w osobnej linii ($4 \le N \le 50\,000$).

Następnie sędzia zadaje pytania.

Pytanie typu 1 to linia sformatowana jako "? 1 i j k" ($1 \le i, j, k \le N$; $i, j$ oraz $k$ są parami różne). Następnie wypisujesz linię z pojedynczą liczbą całkowitą: medianą wartości $a_i, a_j$ oraz $a_k$.

Pytanie typu 2 to linia sformatowana jako "? 2 i j" ($1 \le i, j \le N$; $i \neq j$). Następnie wypisujesz linię z pojedynczą liczbą całkowitą: $i$, jeśli $a_i < a_j$, lub $j$, jeśli $a_i > a_j$.

Pytanie typu 3 to linia sformatowana jako "? 3 i j" ($1 \le i, j \le N$; $i \neq j$). Następnie wypisujesz linię z pojedynczą liczbą całkowitą: minimalną wartość spośród $a_i$ oraz $a_j$.

Niech $q_1$ oznacza łączną liczbę pytań typu 1, $q_2$ liczbę pytań typu 2, a $q_3$ liczbę pytań typu 3. Możesz założyć, że wartość $p = 2N - 2q_1 - 2q_2 - q_3$ nie jest mniejsza niż 2.

Aby przejść do fazy odpowiedzi, program jurorski wysyła linię zawierającą znak "!". Następnie musisz wypisać dwie linie: pierwszą zawierającą $N$ liczb całkowitych oddzielonych spacjami $a_1, \dots, a_N$ oraz drugą zawierającą $N$ liczb całkowitych oddzielonych spacjami $b_1, \dots, b_N$. Każda z tych dwóch sekwencji musi być permutacją liczb $1, \dots, N$ i muszą one różnić się na co najmniej $\lceil p/2 \rceil$ pozycjach.

Nie zapomnij wypisać znaku nowej linii i opróżnić bufora wyjściowego po wypisaniu odpowiedzi oraz po wypisaniu każdej permutacji, w przeciwnym razie możesz otrzymać błąd "Idleness Limit Exceeded".

Przykład

Wejście 1

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

Wyjście 1

4
4
1
3 5 4 1 2
5 4 3 2 1

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#567Editorial Open集训队作业 解题报告 by 殷骏Qingyu2026-01-02 22:25:29 Download

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.