QOJ.ac

QOJ

Time Limit: 4 s Memory Limit: 512 MB Total points: 100 Difficulty: [show] Interactive

#1815. 게으른 심판

Statistics

이 문제는 인터랙티브 문제입니다.

심사위원들은 현재 대회의 문제 J의 수정된 버전을 위한 심사 프로그램 전략을 작업 중입니다.

해당 문제에서, 앨리스는 비밀리에 첫 $N$개의 정수의 순열 $a_1, a_2, \dots, a_N$을 만들고 밥에게 $N$을 알려줍니다. 밥은 이 순열을 알아내기 위해 몇 가지 질문을 합니다. 앨리스는 이전 답변들과 모순되지 않는 한 과정 중에 순열을 변경할 수 있습니다.

심사위원들은 다음을 수행할 AliceBot을 만들 계획입니다. 두 단계가 있습니다: 질문 단계와 답변 단계.

질문 단계에서, 심사위원은 AliceBot에게 정수 $N$을 알려줍니다. 그러면 AliceBot은 심사위원이 순열에 대해 묻는 질문에 답해야 합니다.

이어지는 답변 단계에서, AliceBot은 이전 단계의 답변들과 일관된 두 개의 서로 다른 순열 $a_1, \dots, a_N$과 $b_1, \dots, b_N$을 구성해야 합니다.

심사위원이 질문을 할 때마다 심사위원의 인내심 $P$가 감소합니다. 초기 인내심은 $P = 2N$입니다.

심사위원이 할 수 있는 질문은 세 가지 유형이 있습니다:

  • 유형 1, 형식 “? 1 i j k”: 심사위원은 세 개의 서로 다른 정수 $i, j, k$ ($1 \le i, j, k \le N$)를 선택하고, AliceBot은 세 정수 $a_i, a_j, a_k$를 살펴본 뒤 그중 중앙값(최솟값도 최댓값도 아닌 값)을 밥에게 알려줍니다. 이러한 각 질문은 심사위원의 인내심을 2만큼 감소시킵니다.
  • 유형 2, 형식 “? 2 i j”: 심사위원은 두 개의 서로 다른 정수 $i, j$ ($1 \le i, j \le N$)를 선택하고, AliceBot은 $a_i < a_j$이면 $i$를, 그렇지 않으면 $j$를 답합니다. 이러한 각 질문은 심사위원의 인내심을 2만큼 감소시킵니다.
  • 유형 3, 형식 “? 3 i j”: 심사위원은 두 개의 서로 다른 정수 $i, j$ ($1 \le i, j \le N$)를 선택하고, AliceBot은 $a_i$와 $a_j$ 중 최솟값을 알려줍니다. 이러한 각 질문은 심사위원의 인내심을 1만큼 감소시킵니다.

질문 후 심사위원의 인내심은 2 아래로 떨어지지 않는다고 가정할 수 있습니다. 심사위원이 충분한 질문을 했다고 판단하면, “!” 명령이 AliceBot에게 전송되어 답변 단계로 전환됩니다.

답변 단계에서, AliceBot은 심사위원에게 두 개의 순열 $a_1, \dots, a_N$과 $b_1, \dots, b_N$을 알려줍니다. 이 두 순열은 질문 단계에서 주어진 모든 답변과 일관되어야 하며, $a_i \neq b_i$인 위치 $i$의 개수는 질문 단계 종료 시 심사위원의 인내심을 $p$라고 할 때 최소 $\lceil p/2 \rceil$개여야 합니다.

심사위원이 너무 게으르기 때문에, 여러분은 AliceBot을 구현해야 합니다. 이 문제는 제한 사항 내의 모든 가능한 $N$에 대해 해결 가능함이 증명되어 있습니다.

인터랙션

먼저, 심사 프로그램이 별도의 줄에 정수 $N$ ($4 \le N \le 50\,000$)을 알려줍니다.

그다음 심사위원이 질문을 합니다.

유형 1 질문은 “? 1 i j k” ($1 \le i, j, k \le N$; $i, j, k$는 서로 다름) 형식의 한 줄입니다. 그러면 여러분은 $a_i, a_j, a_k$ 값의 중앙값인 정수 하나를 한 줄에 출력합니다.

유형 2 질문은 “? 2 i j” ($1 \le i, j \le N$; $i \neq j$) 형식의 한 줄입니다. 그러면 여러분은 $a_i < a_j$이면 $i$를, $a_i > a_j$이면 $j$를 정수 하나로 출력합니다.

유형 3 질문은 “? 3 i j” ($1 \le i, j \le N$; $i \neq j$) 형식의 한 줄입니다. 그러면 여러분은 $a_i$와 $a_j$ 중 최솟값인 정수 하나를 한 줄에 출력합니다.

유형 1 질문이 $q_1$개, 유형 2 질문이 $q_2$개, 유형 3 질문이 $q_3$개 있다고 합시다. $p = 2N - 2q_1 - 2q_2 - q_3$ 값은 2 이상이라고 가정할 수 있습니다.

답변 단계로 전환하기 위해, 심사 프로그램은 ‘!’ 기호로 구성된 줄을 출력합니다. 그 후, 여러분은 두 줄을 출력해야 합니다. 첫 번째 줄에는 $N$개의 공백으로 구분된 정수 $a_1, \dots, a_N$을, 두 번째 줄에는 $N$개의 공백으로 구분된 정수 $b_1, \dots, b_N$을 출력합니다. 이 두 수열은 각각 $1, \dots, N$의 순열이어야 하며, 최소 $\lceil p/2 \rceil$개의 위치에서 서로 달라야 합니다.

답변을 출력한 후에는 개행 문자를 출력하고 출력 버퍼를 비우는 것을 잊지 마십시오. 그렇지 않으면 “Idleness Limit Exceeded” 오류가 발생할 수 있습니다.

예제

입력 1

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

출력 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.