【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性)

本文主要是介绍【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[蓝桥杯 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 根。

小明可以进行三种操作:

  1. 将三圈塑料棒都顺时针旋转一个单位。例如当前外圈从 0 0 0 点位置开始顺时针依次是 YRYGRYGRGGGG,中圈是 RGRGGRRY,内圈是 GGGR。那么顺时针旋转一次之后,外圈、中圈、内圈依次变为:GYRYGRYGRGGGYRGRGGRRRGGG
  2. 将三圈塑料棒都逆时针旋转一个单位。例如当前外圈从 0 0 0 点位置开始顺时针依次是 YRYGRYGRGGGG,中圈是 RGRGGRRY,内圈是 GGGR。那么逆时针旋转一次之后,外圈、中圈、内圈依次变为:RYGRYGRGGGGYGRGGRRYRGGRG
  3. 将三圈 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。那么轮换一次之后,外圈、中圈、内圈依次变为:RRYGRYGRGGGGGGRGGRRYYGGR

小明的目标是把所有绿色移动到外圈、所有红色移动中圈、所有黄色移动到内圈。给定初始状态,请你判断小明是否可以达成目标?

输入格式

第一行包含一个整数 T T T,代表询问的组数。 ( 1 ≤ T ≤ 100 ) (1 \le T \le 100) (1T100)

每组询问包含 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 题。


思路

每个圈中每4个元素为1个周期。其中,外圈有3个周期,中圈有2个周期,内圈有1个周期。每个周期内的元素可以分为四组,每个周期中相同位置的塑料棒被认为是一组。无论旋转多少次,塑料棒的位置总是在组内循环。

图中数字代表组号,数字相同的元素可以调换位置。

Inner
Middle
Outer
2
1
3
4
2
1
3
4
1
2
3
4
2
1
3
4
1
2
3
4
1
2
3
4

首先,定义一个长度为4的map数组,存储每组中每个颜色的塑料棒的数量。

然后,读入外圈、中圈和内圈的塑料棒的颜色,并根据塑料棒的位置和颜色进行分组统计,每个周期中相同位置(i % 4)的塑料棒被认为是一组。

接着,检查每组中的塑料棒颜色数量是否满足目标状态:每组应有3个绿色,2个红色,1个黄色。如果所有组都满足,那么输出"YES",否则输出"NO"。


AC代码

#include <algorithm>
#include <cmath>
#include <iostream>
#include <map>
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;const int N = 1e6 + 7;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;int n;void solve() {map<char, int> cnt[4];for (int i = 0; i < 4; i++) {// 初始化cnt[i]['G'] = 0;cnt[i]['Y'] = 0;cnt[i]['R'] = 0;}string str[3];for (int i = 2; i >= 0; i--) {cin >> str[i];}for (int j = 0; j < 3; j++) {for (int i = 0; i < (j + 1) * 4; i++) {// cout << i << " " << i % 8 << " " << i % 4 << endl;// 统计每组中某颜色的数量cnt[i % 4][str[j][i]]++;}}bool ans = 1;for (int i = 0; i < 4; i++) {// 每组应有3绿2红1黄ans &= (cnt[i]['G'] == 3);ans &= (cnt[i]['R'] == 2);ans &= (cnt[i]['Y'] == 1);}cout << (ans ? "YES" : "NO") << "\n";
}int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;while (n--) {solve();}return 0;
}

这篇关于【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/869699

相关文章

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &