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

news2024/11/27 6:13:37

[蓝桥杯 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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1562971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型日报20240401

大模型实时打《街霸》捉对PK&#xff0c;GPT-4居然不敌3.5&#xff0c;新型Benchmark火了 链接&#xff1a;https://news.miracleplus.com/share_link/22340 让大模型直接操纵格斗游戏《街霸》里的角色&#xff0c;捉对PK&#xff0c;谁更能打&#xff1f;GitHub上一种你没有见…

2013年认证杯SPSSPRO杯数学建模A题(第二阶段)护岸框架全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 A题 护岸框架 原题再现&#xff1a; 在江河中&#xff0c;堤岸、江心洲的迎水区域被水流长期冲刷侵蚀。在河道整治工程中&#xff0c;需要在受侵蚀严重的部位设置一些人工设施&#xff0c;以减弱水流的冲刷&#xff0c;促进该处泥沙的淤积&…

C++ | Leetcode C++题解之第1题两数之和

题目&#xff1a; C 题解&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> hashtable;for (int i 0; i < nums.size(); i) {auto it hashtable.find(target - nums[i]);if (it …

系统设计理念:满足设计要求

在今天的文章中,我们将层层剥离并深入探讨系统设计要求的本质。 让我们了解系统设计的支柱以及如何创建强大且有弹性的应用程序。 什么是好的设计? 在我们深入讨论技术细节之前,让我们先讨论一下什么是好的设计。 当我们谈论系统架构中的良好设计时,我们关注几个关键原则:…

qt5-入门-自定义委托-简单例子

参考&#xff1a; Qt 自定义委托_w3cschool https://www.w3cschool.cn/learnroadqt/ov8h1j4z.html C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt 5.12 理论知识 Qt的model/view架构中&#xff0c;view只是…

Mysql实战--为什么表数据删掉一半,表文件大小不变

经常会有同学来问我&#xff0c;我的数据库占用空间太大&#xff0c;我把一个最大的表删掉了一半的数据&#xff0c;怎么表文件的大小还是没变&#xff1f; 那么今天&#xff0c;我就和你聊聊数据库表的空间回收&#xff0c;看看如何解决这个问题。 这里&#xff0c;我们还是针…

2024年04月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年04月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多&#xff0c;人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

数据库之迁移常规操作(Postgresql篇)

一、docker安装postgresql 1. 拉取postgres docker pull postgres2. 创建容器 注&#xff1a;默认登录账户postgres, 密码123456, 对外暴露端口5432, 卷映射&#xff1a;可在物理机修改数据库配置文件 引用文章查看&#x1f440; docker run --name postgres -e POSTGRES_P…

《养育女孩》:教你如何培养独立、自信的女儿

粉丝福利&#xff1a;公众号内回复3可免费获取本期《养育女孩》的读书音频哦。​ 养育女孩&#xff0c;是一本由澳大利亚作家史蒂夫比达尔夫所著的育儿书籍。书中深入探讨了女孩的心理发展&#xff0c;以及父母和教育者如何支持她们成长为强大、自信和健康的女性。 比达尔夫将…

设计模式7--建造者模式

定义 案例一 案例二 优缺点

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd 介绍containerd 安装方法二进制文件安装源码构建安装 注意事项说明 介绍 Containerd是一个工业标准的容器运行时&#xff0c;它强调简单、健壮和可移植性。它可作为Linux和Windows的守护进程&#xff0c;能管理主机系…

RK3588 NPU研究(一)

使用NPU进行AI计算&#xff0c;具体对应模型推理 对应代码位置 hardware/rockchip/rknpu2 examples: yolo5 编译 下载NDK工具https://developer.android.google.cn/ndk/downloads?hlzh-cn源码中使用16b&#xff0c;测试可以使用16/17/18/19/20&#xff0c;不可以使用21&…

C语言-atoi函数的模拟

模拟术语讲解 首先&#xff0c;需要定义一个标志位变量sign&#xff0c;用于表示转换结果的合法性1。定义一个函数My_atoi&#xff0c;用于实现atoi的功能1。在My_atoi函数中&#xff0c;首先遍历字符串&#xff0c;直到遇到第一个非空格字符1。如果第一个字符不是数字或正负号…

ROS安装教程(鱼香ROS快捷版)

文章目录 前言一、ROS版本二、ROS安装1.添加ROS源2.添加密钥3.安装ROS4.安装python依赖包&#xff08;可选&#xff09;5.初始化rosdep6.ROS 测试 总结 前言 对于初学者来说&#xff0c;ROS的安装往往是一个令人头疼的问题&#xff0c;复杂的步骤和网络问题常常成为入门的第一…

kubernetes-dashboard 安装配置

k8s 1.23以上的版本 https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 执行命令&#xff1a; kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 安装完成后&#x…

FSH6罗德与施瓦茨FSH6频谱分析仪

181/2461/8938产品概述&#xff1a; R&S FSH6频谱分析仪坚固耐用、方便易用&#xff0c;专为野外使用而设计。它重量轻、操作简单、设计合理且具有大量测量功能&#xff0c;是任何需要高效测量仪器进行户外工作的人不可或缺的工具。 R&S FSH6是一款手持式频谱分析仪&…

项目:USB键盘和鼠标的复合设备

我们的复合设备使用一个物理设备就可以完成多个功能。 使用复合设备同时完成USB键盘和鼠标功能&#xff0c;它的主要实现方式有两种&#xff0c; 第一个就是我们将多个设备描述符合并成一个&#xff0c;这个相对比较简单&#xff0c;我们只要根据相应的报告描述符处理数据就可…

基于springboot实现在线文档管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线文档管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;在线文档管理当然也不能排除在外。在线文档管理系统是以实际运用为开发背景&am…

3分钟教你最大化利用APP消息推送(Push)在运营中的优势

推送通知是指运营团队通过自有产品或外部工具&#xff0c;主动向用户的移动设备发送信息。用户可以直接在手机的锁屏和通知中心看到这些推送通知&#xff0c;点击通知中心的相关内容可以激活应用并跳转至特定页面。例如&#xff0c;我们在手机锁屏时接收到的微信消息&#xff0…

SSM框架学习——MyBatis关联映射

MyBatis关联映射 为什么要关联映射 实际开发中&#xff0c;对数据库操作常常会涉及多张表&#xff0c;所以在OOP中就涉及对象与对象的关联关系。针对多表操作&#xff0c;MyBatis提供关联映射。 关联关系概述 一对一&#xff1a;A类中定义B类的属性b&#xff0c;B类中定义A…