AT_arc184_a [ARC184A] Appraiser

题目描述

[problemUrl]: https://atcoder.jp/contests/arc184/tasks/arc184_a 本题为**交互式**问题,且**评测器为自适应(adaptive)**。详情请参阅注意事项。 **此外,题目中的参数固定为 $N=1000, M=10, Q=950$。** 有 $N$ 枚硬币,编号为 $1,2,\dots,N$。 在这些硬币中,恰好有 $M$ 枚是假币。 鉴定师每次可以鉴定两枚硬币,判断它们是否为同一类型。具体来说: - 如果两枚硬币“都是正品”或“都是假币”,则判定为同种。 - 否则,判定为异种。 请在不超过 $Q$ 次的鉴定内,找出所有假币。

输入格式

本题为交互式问题。 首先,从标准输入读入 $N, M, Q$。 > $N$ $M$ $Q$ 接下来,你可以进行 $0$ 次或多次(最多 $Q$ 次)鉴定。 每次鉴定时,请按如下格式输出到标准输出,表示要鉴定硬币 $x, y$。(末尾需换行) > ? $x$ $y$ 其中,$x, y$ 是 $1$ 到 $N$ 之间的不同整数。 评测器会返回以下三种之一的响应: ``` 0 ``` 当响应为 `0` 时,表示硬币 $x, y$ 为同种。 ``` 1 ``` 当响应为 `1` 时,表示硬币 $x, y$ 为异种。 ``` -1 ``` 当响应为 `-1` 时,表示鉴定无效。具体包括: - 输出的 $x, y$ 不满足约束条件 - 鉴定次数超过 $Q$ 次 只要出现上述任一情况,评测器会返回 `-1`,此时你的程序已被判为不正确,请立即退出。 最后,请按如下格式输出,表示你认为硬币 $A_1, A_2, \dots, A_M$ 是假币。(末尾需换行) > ! $A_1$ $A_2$ $\dots$ $A_M$ 其中,$A_i$ 是 $1$ 到 $N$ 之间的不同整数。 输出后,请立即退出程序。 注意,若输出格式不符合要求,也会被判为不正确。此后会返回 `-1`,此时也请立即退出程序。

输出格式

(同上,见输入格式)

说明/提示

## 约束条件 - $ \color{red}{N = 1000} $ - $ \color{red}{M = 10} $ - $ \color{red}{Q = 950} $ ## 注意事项 - **每次输出后,需在末尾加换行并刷新标准输出。** 否则可能会被判为 TLE 或 WA。 - 输出答案后(或收到 `-1` 时)请立即退出程序,否则评测结果不确定。 - 多余的换行也会被视为输出格式错误。 - **本题评测器为自适应(adaptive)**。也就是说,评测器可以在任何时刻,只要保证一致性,就可以更改其假币的设定。详见输入输出样例。 ## 输入输出样例 本样例中 $N=5, M=2, Q=10$,评测器最初假定硬币 $1,2$ 为假币。 注意,本样例不满足本题约束,仅用于说明,不会用于实际评测。 输入输出说明 `5 2 10` 给出 $N, M, Q$。 `? 1 2` 鉴定硬币 $1,2$。 `0` 判定为同种。 `? 1 3` 鉴定硬币 $1,3$。 `1` 判定为异种。 `? 1 4` 鉴定硬币 $1,4$。 `1` 判定为异种。 `! 1 2` 输出 $1,2$ 为假币。实际上,评测器最初假定 $1,2$ 为假币,但假如 $3,4$ 也能与之前的所有判定结果一致,评测器也可以将假币设定更改为 $3,4$。 因此,评测器有可能判定你的解答不正确。 由 ChatGPT 4.1 翻译