[蓝桥杯 2019 国 B] 解谜游戏
题目背景
题目描述
小明正在玩一款解谜游戏。谜题由
24
24
24 根塑料棒组成,其中黄色塑料棒
4
4
4 根,红色
8
8
8 根,绿色
12
12
12 根 (后面用 Y
表示黄色、R
表示红色、G
表示绿色)。初始时这些塑料棒排成三圈,如上图所示,外圈
12
12
12 根,中圈
8
8
8 根,内圈
4
4
4 根。
小明可以进行三种操作:
- 将三圈塑料棒都顺时针旋转一个单位。例如当前外圈从
0
0
0 点位置开始顺时针依次是
YRYGRYGRGGGG
,中圈是RGRGGRRY
,内圈是GGGR
。那么顺时针旋转一次之后,外圈、中圈、内圈依次变为:GYRYGRYGRGGG
、YRGRGGRR
和RGGG
。 - 将三圈塑料棒都逆时针旋转一个单位。例如当前外圈从
0
0
0 点位置开始顺时针依次是
YRYGRYGRGGGG
,中圈是RGRGGRRY
,内圈是GGGR
。那么逆时针旋转一次之后,外圈、中圈、内圈依次变为:RYGRYGRGGGGY
、GRGGRRYR
和GGRG
。 - 将三圈
0
0
0 点位置的塑料棒做一个轮换。具体来说:外圈
0
0
0 点塑料棒移动到内圈
0
0
0 点,内圈
0
0
0 点移动到中圈
0
0
0 点,中圈
0
0
0 点移动到外圈
0
0
0 点。例如当前外圈从
0
0
0 点位置开始顺时针依次是
YRYGRYGRGGGG
,中圈是RGRGGRRY
,内圈是GGGR
。那么轮换一次之后,外圈、中圈、内圈依次变为:RRYGRYGRGGGG
、GGRGGRRY
和YGGR
。
小明的目标是把所有绿色移动到外圈、所有红色移动中圈、所有黄色移动到内圈。给定初始状态,请你判断小明是否可以达成目标?
输入格式
第一行包含一个整数 T T T,代表询问的组数。 ( 1 ≤ T ≤ 100 ) (1 \le T \le 100) (1≤T≤100)。
每组询问包含 3 3 3 行:
第一行包含 12 12 12 个大写字母,代表外圈从 0 0 0 点位置开始顺时针每个塑料棒的颜色。
第二行包含 8 8 8 个大写字母,代表中圈从 0 0 0 点位置开始顺时针每个塑料棒的颜色。
第三行包含 4 4 4 个大写字母,代表内圈从 0 0 0 点位置开始顺时针每个塑料棒的颜色。
输出格式
对于每组询问,输出一行 YES
或者 NO
,代表小明是否可以达成目标。
样例 #1
样例输入 #1
2
GYGGGGGGGGGG
RGRRRRRR
YRYY
YGGGRRRRGGGY
YGGGRRRR
YGGG
样例输出 #1
YES
NO
提示
蓝桥杯 2019 年国赛 B 组 H 题。
确保这六根棍有三根绿色,两根红色,一根黄色
#include <iostream>
using namespace std;
#include <bits/stdc++.h>
int t;
string a,b,c;
int cnt[110];
int main()
{
cin>>t;
while(t--)
{
cin>>a>>b>>c;
bool flag=1;//有两组 如果定义在外面,flag的值会在第一轮被赋予0 然后一直不会改变
for(int i=0;i<4;i++)//通过遍历内部的小圈
{
memset(cnt,0,sizeof(cnt));//初始化桶
++cnt[a[i]],++cnt[b[i]],++cnt[c[i]];
++cnt[b[i+4]],++cnt[a[i+4]],++cnt[a[i+8]];
if(cnt['G']!=3||cnt['R']!=2||cnt['Y']!=1)//如果这6个固定的圈不符合要求 则一定过不了
{
flag=0;
break;
}
}
cout<<(flag?"YES":"NO")<<'\n';//判断
}
return 0;
}