QOJ.ac

QOJ

時間限制: 4 s 記憶體限制: 512 MB 總分: 100 难度: [顯示] 互動

#1815. 懒惰的裁判

统计

这是一个交互式问题。

评测系统正在为当前比赛中问题 J 的修改版本制定评测程序策略。

在该问题中,Alice 秘密发明了一个包含前 $N$ 个整数的排列 $a_1, a_2, \dots, a_N$,并告诉 Bob $N$ 的值。Bob 通过提出一些问题来确定这个排列。Alice 可以在过程中更改排列,只要它与她之前的回答保持一致即可。

评测系统计划创建一个 AliceBot 来完成以下任务。

任务分为两个阶段:提问阶段和回答阶段。

在提问阶段,评测系统会告诉 AliceBot 一个整数 $N$。然后 AliceBot 必须回答评测系统提出的关于该排列的一些问题。

在随后的回答阶段,AliceBot 必须构造两个不同的排列 $a_1, \dots, a_N$ 和 $b_1, \dots, b_N$,它们必须与之前阶段的所有回答保持一致。

提问的评测系统拥有初始耐心值 $P = 2N$。每当评测系统提出一个问题,其耐心值就会减少。

评测系统可以提出三种类型的问题:

  • 类型 1,格式为 “? 1 i j k”:评测系统选择三个不同的整数 $i, j, k$ ($1 \le i, j, k \le N$),AliceBot 查看这三个整数 $a_i, a_j, a_k$,并告诉 Bob 它们的中位数(既不是最小值也不是最大值的那个数)。每个此类问题会使评测系统的耐心值减少 2。
  • 类型 2,格式为 “? 2 i j”:评测系统选择两个不同的整数 $i, j$ ($1 \le i, j \le N$),如果 $a_i < a_j$,AliceBot 回答 $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$ 的位置数量至少为 $\lceil p/2 \rceil$,其中 $p$ 是提问阶段结束时评测系统的耐心值。

由于评测系统太懒了,你需要实现这个 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$,否则输出 $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.