P13166 [GCJ 2017 #1B] Stable Neigh-bors
题目描述
你非常幸运地拥有 $N$ 只独角兽。每只独角兽的鬃毛中只包含以下三种颜色中的一种或两种:红色、黄色和蓝色。鬃毛的颜色取决于它包含的具体颜色种类:
- 只有一种颜色的鬃毛,看起来就是那种颜色。例如,只有蓝色鬃毛的鬃毛就是蓝色。
- 同时有红色和黄色鬃毛的鬃毛看起来是橙色。
- 同时有黄色和蓝色鬃毛的鬃毛看起来是绿色。
- 同时有红色和蓝色鬃毛的鬃毛看起来是紫色。
你拥有 $R$、$O$、$Y$、$G$、$B$ 和 $V$ 只鬃毛分别为红色、橙色、黄色、绿色、蓝色和紫色的独角兽。
你刚刚建造了一个有 $N$ 个马厩的圆形马圈,这些马厩首尾相连,每个马厩都与两个其他马厩相邻。你希望将每只独角兽恰好放入一个马厩中。然而,独角兽需要感到稀有和特别,因此,任何两只鬃毛中包含至少一种相同颜色的独角兽都不能相邻。例如,鬃毛为橙色的独角兽不能与鬃毛为紫色的独角兽相邻,因为它们的鬃毛都含有红色。同理,鬃毛为绿色的独角兽不能与鬃毛为黄色的独角兽相邻,因为它们的鬃毛都含有黄色。
你能否将所有独角兽都安置好?如果可以,请给出任意一种可行的安排。
输入格式
输入的第一行为测试用例数 $T$。接下来有 $T$ 组测试数据,每组数据为一行,包含七个整数:$N$、$R$、$O$、$Y$、$G$、$B$ 和 $V$。
输出格式
对于每组测试数据,输出一行,格式为 `Case #x: y`,其中 $x$ 为测试用例编号(从 1 开始),$y$ 为 `IMPOSSIBLE`(如果无法安排所有独角兽),或者为一个长度为 $N$ 的字符串,表示独角兽在马厩中的排列顺序,从任意一个马厩开始,顺时针排列。用 `R` 表示红色鬃毛的独角兽,`O` 表示橙色,`Y` 表示黄色,`G` 表示绿色,`B` 表示蓝色,`V` 表示紫色。该排列必须满足题目描述中的所有规则。
如果存在多种可行的排列方式,你可以输出任意一种。
说明/提示
**样例解释**
注意,最后两个样例不会出现在 Small 数据集中。
对于样例 1,有多种可行答案;例如,BYBRYR 也是一种可行解。注意,BYRYRB 并不是有效答案,因为马厩是环形的,第一个和最后一个马厩也是相邻的!
对于样例 2,只有三个马厩,每个马厩都与其他两个相邻,因此两只黄色鬃毛的独角兽必须相邻,这是不允许的。
对于样例 3,注意如果按照 Google logo 的颜色顺序(BRYBGR)排列独角兽,并不是有效答案,因为蓝色鬃毛的独角兽会与绿色鬃毛的独角兽相邻,而它们的鬃毛都含有蓝色。
对于样例 4,不能有两只黄色鬃毛的独角兽相邻,也不能有两只紫色鬃毛的独角兽相邻。
**数据范围**
- $1 \leq T \leq 100$。
- $3 \leq N \leq 1000$。
- $R + O + Y + G + B + V = N$。
- 对于每个 $Z \in \{R, O, Y, G, B, V\}$,$0 \leq Z$。
**Small 数据集(测试集 1 - 可见)**
- $O = G = V = 0$。(每只独角兽的鬃毛只包含一种颜色。)
**Large 数据集(测试集 2 - 隐藏)**
- 除一般限制外无其他限制。(每只独角兽的鬃毛可能包含一种或两种颜色。)
由 ChatGPT 4.1 翻译