哈哈哈,看起来很难其实很简单啦
题目描述
小明正在玩一款解谜游戏。谜题由 24 根塑料棒组成,其中黄色塑料棒 4 根,红色 8 根,绿色 12 根 (后面用 Y 表示黄色、R 表示红色、G 表示绿色)。初始时这些塑料棒排成三圈,如上图所示,外圈 12 根,中圈 8 根,内圈 4 根。
小明可以进行三种操作:
1、将三圈塑料棒都顺时针旋转一个单位。例如当前外圈从 0 点位置开始顺时针依次是 YRYGRYGRGGGG,中圈是 RGRGGRRY,内圈是 GGGR。那么顺时针旋转一次之后,外圈、中圈、内圈依次变为:GYRYGRYGRGGG、 YRGRGGRR 和 RGGG。
2、将三圈塑料棒都逆时针旋转一个单位。例如当前外圈从 0 点位置开始顺时针依次是 YRYGRYGRGGGG,中圈是 RGRGGRRY,内圈是 GGGR。那么逆时针旋转一次之后,外圈、中圈、内圈依次变为:RYGRYGRGGGGY、 GRGGRRYR 和 GGRG。
3、将三圈 0 点位置的塑料棒做一个轮换。具体来说:外圈 0 点塑料棒移动到内圈 0 点,内圈 0 点移动到中圈 0 点,中圈 0 点移动到外圈 0 点。例如当前外圈从 0 点位置开始顺时针依次是 YRYGRYGRGGGG,中圈是 RGRGGRRY,内圈是 GGGR。那么轮换一次之后,外圈、中圈、内圈依次变为:RRYGRYGRGGGG、GGRGGRRY 和 YGGR。
小明的目标是把所有绿色移动到外圈、所有红色移动中圈、所有黄色移动到内圈。给定初始状态,请你判断小明是否可以达成目标?
输入描述
第一行包含一个整数 T (1≤T≤100),代表询问的组数。
每组询问包含 3 行:
第一行包含 12 个大写字母,代表外圈从 0 点位置开始顺时针每个塑料棒的颜色。
第二行包含 8 个大写字母,代表中圈从 0 点位置开始顺时针每个塑料棒的颜色。
第三行包含 4 个大写字母,代表内圈从 0 点位置开始顺时针每个塑料棒的颜色。
输出描述
对于每组询问,输出一行 YES 或者 NO,代表小明是否可以达成目标。
输入输出样例
输入
2
GYGGGGGGGGGG
RGRRRRRR
YRYY
YGGGRRRRGGGY
YGGGRRRR
YGGG
输出
YES
NO
思路
刚看到图脑子就很懵,这是个啥???
要把所有黄色换到内层,红色换到中层,绿色换到外层。
那行吧,怎么换呢?
外圈 0 点塑料棒移动到内圈 0 点,内圈 0 点移动到中圈 0 点,中圈 0 点移动到外圈 0 点。
那我想是什么顺序能进行一次操作就形成,G,R,Y的顺序呢?
Y G R —> G R Y
那什么顺序进行一次操作能形成Y G R呢?
R Y G—>Y G R
那什么顺序进行一次操作能形成 R Y G呢?
G R Y—>R Y G
这形成了一个循环
那么只要外层的0点、中层的0点、内层的0点形成R Y G 或者Y G R我们就能使他们变换成G R Y的顺序
所以我们要不断的转直到出现那两种顺序中的一种
跳出循环的两种方式
1、所有的绿色都在外层,所有的红色都在中层,所有的黄色都在内层。
2、外层有12个,中层有8个,内层有4个,所以取他们的最小公倍数24,也就是说如果转了24次还没成功那么就不可能成功了。
代码
import os
import sys
# 请在此输入您的代码
n=int(input())
games=[]
for i in range(n):
games.append([])
for j in range(3):
games[-1].append(input())
def con(num):
global games
color_1=list(games[num][0])
color_2=list(games[num][1])
color_3=list(games[num][2])
for i in range(24):
if (color_1[0]=='R' and color_2[0]=='Y' and color_3[0]=='G') or (color_1[0]=='Y' and color_2[0]=='G' and color_3[0]=='R') or (color_1[0]=='G' and color_2[0]=='R' and color_3[0]=='Y'):
color_1[0]='G'
color_2[0]='R'
color_3[0]='Y'
temp_1=color_1[0]
del color_1[0]
color_1.append(temp_1)
temp_2=color_2[0]
del color_2[0]
color_2.append(temp_2)
temp_3=color_3[0]
del color_3[0]
color_3.append(temp_3)
if 'Y' not in color_1 and 'R' not in color_1:
if 'G' not in color_2 and 'Y' not in color_2:
if 'G' not in color_3 and 'R' not in color_3:
print("YES")
return
print("NO")
return
for i in range(n):
con(i)
编码不易,有帮助的话点个赞支持一下吧