CF1404D Game of Pairs
题目描述
这是一个交互题。
给定一个固定的正整数 $n$。有两位玩家,First 和 Second,按照如下规则进行游戏:
1. First 取 $2n$ 个数 $1, 2, \dots, 2n$,并将它们任意分成 $n$ 个不相交的数对。
2. 然后,Second 从 First 划分出的每一对中各选出一个数(可以任意选择)。
为了决定游戏的胜者,我们计算 Second 选出的所有数的和。如果这些数的和是 $2n$ 的倍数,则 Second 获胜;否则 First 获胜。
你将获得整数 $n$。你的任务是决定你想扮演哪一位玩家,并赢得这场游戏。
输入格式
交互开始时,首先读入一个整数 $n$($1 \le n \le 5 \cdot 10^5$)。
读入后,输出一行,内容为 First 或 Second,表示你选择扮演哪一位玩家。之后的交互流程取决于你的选择:
- 如果你选择扮演 First,输出一行 $2n$ 个整数 $p_1, p_2, \dots, p_{2n}$,表示数字 $i$ 属于第 $p_i$ 个数对,$1 \le i \le 2n$。其中 $1 \le p_i \le n$,且每个 $1$ 到 $n$ 的数字恰好出现两次。
- 如果你选择扮演 Second,交互器会输出 $2n$ 个整数 $p_1, p_2, \dots, p_{2n}$,表示数字 $i$ 属于第 $p_i$ 个数对。你需要输出一行 $n$ 个整数 $a_1, a_2, \dots, a_n$,每个数对中恰好选出一个数字。
无论你选择扮演哪一方,交互器最后会输出一个整数:如果你的答案正确(即你扮演 First 时,Second 无法选出和为 $2n$ 的倍数的方案,或你扮演 Second 时,你选出的数的和是 $2n$ 的倍数),则输出 $0$;否则输出 $-1$。特别地,如果你选择扮演 First 并失败,交互器不会输出 Second 选出的数字。无论哪种情况,你的程序都应在读入该数字后立即终止。
如果你在交互过程中进行了非法操作,交互器会输出 $-1$ 并结束交互。你将收到 Wrong Answer 判定。请确保在读入该数字后立即终止程序,以避免获得其他判定。
每次输出后不要忘记输出换行并刷新输出缓冲区,否则会收到 Idleness limit exceeded 判定。具体做法如下:
- C++:fflush(stdout) 或 cout.flush()
- Java:System.out.flush()
- Pascal:flush(output)
- Python:stdout.flush()
- 其他语言请参考相关文档。
Hack 格式
Hack 时输入格式如下:
第一行包含一个整数 $n$($1 \le n \le 5 \cdot 10^5$)。
第二行包含 $2n$ 个整数 $p_1, p_2, \dots, p_{2n}$,表示数字 $i$ 属于第 $p_i$ 个数对。如果被 Hack 的解选择扮演 Second,则这些数对有效;如果选择扮演 First,则这些数对无关紧要,但 $p_1, p_2, \dots, p_{2n}$ 仍需构成对 $1, 2, \dots, 2n$ 的有效划分。
输出格式
(见上文交互流程说明)
说明/提示
在第一个样例中,$n=2$,你选择扮演 Second。评测器选择的数对为 $(1, 2)$ 和 $(3, 4)$,你回复 $1$ 和 $3$。这是一个合法选择,因为每对中各选一个数,且 $1+3=4$,是 $4$ 的倍数。
在第二个样例中,$n=2$,你选择扮演 First。你选择的数对为 $(2, 4)$ 和 $(1, 3)$。评测器无法从每对中各选一个数,使得它们的和是 $4$ 的倍数,因此你的答案正确。
注意,样例仅用于说明交互协议,不一定对应真实交互器的行为。
由 ChatGPT 4.1 翻译