这是一个运行两次(run-twice)的任务;两次运行都是交互式的。
在一棵宽阔的橡树周围站着四位贤者。每位贤者的头上都戴着一顶红色、绿色或蓝色的帽子。每位贤者都能看到他们两侧邻居的帽子颜色,但看不到自己帽子的颜色(帽子没有遮住眼睛),也看不到他们对面贤者的帽子颜色(被宽阔的橡树挡住了)。每位贤者必须在不与其他贤者交流的情况下,在纸上写下自己帽子的颜色。请设计一个协议,使得四位贤者中至少有一位能确定猜对自己的帽子颜色。
交互协议
第一行包含两个整数 $t$ 和 $s$,分别表示测试用例的数量和解决方案的运行编号($1 \le t \le 100$;$s \in \{1, 2\}$)。接下来是 $t$ 个测试用例的描述,每个测试用例占一行。
如果 $s = 1$,测试用例包含四个单词 $c_1, c_2, c_3$ 和 $c_4$,表示参与者的帽子颜色($c_i \in \{\text{red}, \text{green}, \text{blue}\}$)。作为响应,输出一行,包含一个整数 $m$($1 \le m \le 4$),表示根据你的协议,将要猜测自己帽子颜色的贤者编号(如果有多个,输出任意一个即可)。
如果 $s = 2$,测试用例包含一个整数 $m$ 和两个单词 $\ell$ 和 $r$,表示必须猜测自己帽子颜色的贤者编号,以及其左侧和右侧邻居的帽子颜色($1 \le m \le 4$;$\ell, r \in \{\text{red}, \text{green}, \text{blue}\}$;$\ell = c_{(m+2) \bmod 4 + 1}$;$r = c_{m \bmod 4 + 1}$)。作为响应,输出一行,包含一个单词 $g$,表示第 $m$ 位贤者猜测的帽子颜色。如果 $g = c_m$,则该答案被接受。交互器是不区分大小写的,因此你可以以任何大小写形式(大写或小写)输出每个字母。
为了防止在测试用例之间传递信息,裁判采取了以下措施:
- 两次运行都是交互式的。因此,在输出之前所有测试用例的答案之前,你不会收到下一个测试用例。在打印每行后,请不要忘记刷新输出流(例如,在 C++ 中使用
fflush(stdout)或cout.flush(),在 Python 中使用sys.stdout.flush(),或在 Java 或 Kotlin 中使用System.out.flush())。否则,你可能会收到 Idleness Limit Exceeded(空闲超限)错误。 - 在第二次运行期间,裁判可能会以任何顺序重新排列这 $t$ 个测试用例,这可能与它们在第一次运行中出现的顺序不一致。
- 在第二次运行期间,裁判还可能加入一些伪造的(counterfeit)测试用例,这些用例不对应第一次运行中的任何测试用例。对于这些用例,输出 “red”、“green” 或 “blue” 中的任何一个都将被视为正确;它们的存在仅为了使你的程序无法轻易区分真实测试用例和伪造测试用例,从而无法在用例之间传递信息。因此,第二次运行中的 $t$ 可能会超过第一次运行中的 $t$。真实和伪造用例的总数不会超过 100。
样例
输入样例 1
1 1 green red blue red
输出样例 1
2
输入样例 2
4 2 2 blue green 4 red blue 3 red red 4 red blue
输出样例 2
blue BLUE blUE Blue