#B. 费解的开关

news2024/11/15 14:22:31

题目描述

你玩过“拉灯”游戏吗?2525盏灯排成一个5x55x5的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。 我们用数字“11”表示一盏开着的灯,用数字“00”表示关着的灯。下面这种状态

10111
01101
10111
10000
11011

Copy

在改变了最左上角的灯的状态后将变成:

01111
11101
10111
10000
11011

Copy

再改变它正中间的灯后状态将变成:

01111
11001
11001
10100
11011

Copy

给定一些游戏的初始状态,编写程序判断游戏者是否可能在6步以内使所有的灯都变亮。

样例输入

第一行有一个正整数nn,代表数据中共有nn个待解决的游戏初始状态。 以下若干行数据分为nn组,每组数据有55行,每行55个字符。每组数据描述了一个游戏的初始状态。各组数据间用一个空行分隔。

样例输出

输出数据一共有nn行,每行有一个小于等于66的整数,它表示对于输入数据中对应的游戏状态最少需要几步才能使所有灯变亮。 对于某一个游戏初始状态,若6步以内无法使所有灯变亮,请输出“-1−1”。

样例

样例一

输入数据 1

3
00111
01011
10001
11010
11100

11101
11101
11110
11111
11111

01111
11111
11111
11111
11111

Copy

输出数据 1

3
2
-1

Copy

数据范围

30\%pts: n \le 530%pts:n≤5

100\%pts: n \le 500。100%pts:n≤500。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
 
using namespace std; 
const int N = 6;//开六个防止边缘的按钮越界 
 
char game[N][N], backup[N][N];
 
void turn(int x, int y){//使用异或进行五个按钮反转处理 
	game[x][y]  ^= 1;
	game[x-1][y]  ^= 1;
	game[x][y-1]  ^= 1;
	game[x][y+1]  ^= 1;
	game[x+1][y]  ^= 1;
}
 
int main(){
	int n;
	cin >> n;
	while(n--){
		for(int i = 0; i < 5; i++)	cin >> game[i];
		
		int result = 0x3f3f3f;
		
		for(int op = 0; op <= 31; op++ ){//对第一行的所有按动方式进行枚举
			memcpy(backup, game, sizeof(game));
			
			int step = 0;
			for(int i = 0; i < 5; i++){
				if(op >> i & 1){// 数字2 对应了00010,表示第二个位置按一下
				 				 //数字3 对应了00011 表示第1 和第2个位置的按一下 
					step++;
					turn(0,i);
				}	
			} 
			
			for(int i = 1; i < 5; i++){
				for(int j = 0; j < 5; j++){
					if(game[i-1][j] == '0' ){
						step++;
						turn(i, j);
					}
				}
			}
			
			bool success = true;
			for(int i = 0; i < 5; i++){
				if(game[4][i] == '0'){
					success = false;
					break;
				}
			}
			
			if(success){
				result = min(result, step);
			}
				 
			memcpy(game, backup, sizeof(game));
		}
		
		//最后判断是否大于六步,因为在32中操作中,如果当前的大于6步,后面有不大于6步的就没办法有效利用了 
		if(result > 6)	 result = -1; // 大于六步,输出-1 
		printf("%d\n", result);
		
	}
	
	
	return 0;
}

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

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

相关文章

基于text2vec和faiss开发实现文档查询系统初体验

最近接触到了一些文本向量化的预训练模型&#xff0c;感觉相比较自己去基于gensim去训练词向量来说&#xff0c;使用预训练模型可能是更高效的方式了&#xff0c;正好有一个想法一直在想能够以什么样的形式间接的实现问答&#xff0c;说白了这里的问答跟我们理解的chatGPT类型的…

iOS——Block one

块类似于匿名函数或闭包&#xff0c;在许多其他编程语言中也存在类似的概念。 可以访问上下文&#xff0c;运行效率高 Block 以下是块的一些基本知识&#xff1a; 块的定义&#xff1a;块是由一对花括号 {} 包围的代码片段&#xff0c;可以包含一段可执行的代码。块的定义使…

125.验证回文串

目录 一、题目 二、代码 一、题目 125. 验证回文串 - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution { public: bool ABC(char& s) {if (s > 65 && s < 90){s 32;return true;}if (s > 97 && s < 122){return true;}if …

FPGA开发:音乐播放器

FPGA开发板上的蜂鸣器可以用来播放音乐&#xff0c;只需要控制蜂鸣器信号的方波频率、占空比和持续时间即可。 1、简谱原理 简谱上的4/4表示该简谱以4分音符为一拍&#xff0c;每小节4拍&#xff0c;简谱上应该也会标注每分钟多少拍。音符时值对照表如下图所示&#xff0c;这表…

无涯教程-Lua - while语句函数

只要给定条件为真&#xff0c;Lua编程语言中的 while 循环语句就会重复执行目标语句。 while loop - 语法 Lua编程语言中 while 循环的语法如下- while(condition) dostatement(s) end while loop - 流程图 在这里&#xff0c;需要注意的关键是 while 循环可能根本不执行。…

Go语音介绍

Go语言介绍 Go 即Golang&#xff0c;是Google公司2009年11月正式对外公开的一门编程语言。 Go是静态强类型语言&#xff0c;是区别于解析型语言的编译型语言。 解析型语言——源代码是先翻译为中间代码&#xff0c;然后由解析器对代码进行解释执行。 编译型语言——源代码编…

【树形DP+换根思想】2022牛客多校加赛 H

登录—专业IT笔试面试备考平台_牛客网 题意&#xff1a; 思路&#xff1a; 这个虽然是树形DP&#xff0c;却用了换根的思想.... 首先&#xff0c;后缀0的个数可以转化成min(cnt2,cnt5)&#xff0c;其中cnt2为2的因子个数&#xff0c;cnt5为5的因子个数 然后进行DP 设dp[u]…

面试之多线程(三)

1.进程和线程的区别 根本区别&#xff1a;进程是操作系统分配资源的最小单位&#xff1b;线程是CPU调度的最小单位所属关系&#xff1a;一个进程包含了多个线程&#xff0c;至少拥有一个主线程&#xff1b;线程所属于进程开销不同&#xff1a;进程的创建&#xff0c;销毁&…

基于Vue+ElementUI+Echarts+G2Plot的仪表盘设计器,代码完全开源

简介 &#x1f525;DashBoard基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的仪表盘设计器&#xff0c;具备仪表盘设计、预览、资源管理、组件管理等能力&#xff0c;支持JSON、MySQL、Oracle、PostgreSQL、HTTP、JavaScript、Groovy等数据集接入&#xf…

类加载器的双亲委派机制和源码分析

双亲委派机制 双亲委派就是一个从子到父的过程,然后还有一个从父到子的状态。具体如下: 如果一个类加载器收到了类加载的请求,它会首先去自己的缓存中查找是否加载过这个类(findLoadedClass),如果有,那么直接加载。如果没有就会让父加载器加载,父加载器会先去自己的缓…

自定义elementui的主题

通常情况下&#xff0c;我们使用elementui框架的时候默认组件的主题都是白色的&#xff0c;比如&#xff1a; 但是如果想自定义主题&#xff0c;改变主题颜色&#xff0c;以及各种默认颜色&#xff0c;其实也不难&#xff1a; 配置默认主题&#xff0c;选好后点击下载 在vu…

软件外包开发的PHP开发框架

PHP有许多流行的开发框架&#xff0c;每个框架都有其独特的特点和优势。下面列举的只是一部分PHP开发框架&#xff0c;还有其他一些框架如Slim、Zend Framework等也值得一提。选择合适的框架取决于项目的需求和开发团队的偏好&#xff0c;您可以根据项目规模、复杂性和功能需求…

Golang之路---02 基础语法——异常机制:panic 和 recover

Golang的异常处理 Go 没有像 Java 和 .NET 那样的 try/catch 异常机制&#xff1a;不能执行抛异常操作。 在 Golang 中&#xff0c;有不少常规错误&#xff0c;在编译阶段就能提前告警&#xff0c;比如语法错误或类型错误等&#xff0c;但是有些错误仅能在程序运行后才能发生&…

【推荐】通用全面的APP测试用例设计

1、安装卸载 用例编号 测试内容 操作步骤 预期结果 测试次数 测试结果 备注 安装 1 通过第三方软件协助安装是否正常 第三方软件搜索app&#xff0c;安装 目标:支持360、豌豆荚、应用宝等主流辅助工具 1 Pass 2 在不同操作系统下安装是否正常 1、使用测试手机安装 …

面试总被问高并发负载测试,你真的会么?

本文将介绍使用50K并发用户测试轻松运行负载测试所需的步骤&#xff08;以及最多200万用户的更大测试&#xff09;。 ❶ 写你的剧本 ❷ 使用JMeter在本地测试 ❸ BlazeMeter SandBox测试 ❹ 使用一个控制台和一个引擎设置每引擎用户数量 ❺ 设置和测试群集&#xff08;一个…

【环形链表(带环链表)超详细总结】

题目一 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 使用快慢指针&#xff0c;如果慢指针等于快指针&#xff0c;就说明是带环链表链表的中间结点 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;…

什么是 webpack?

Webpack 介绍 什么是 webpack&#xff1f; :::tip 官方描述 webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个或多个入口点构建一个 依赖图(dependency graph)&#xff0c;然后将你项目中所需的每一个…

Zookeeper基础操作

搭建Zookeeper服务器 windows下部署 下载地址: https://mirrors.cloud.tencent.com/apache/zookeeper/zookeeper-3.7.1/ 修改配置文件 打开conf目录&#xff0c;将 zoo_sample.cfg复制一份&#xff0c;命名为 zoo.cfg打开 zoo.cfg&#xff0c;修改 dataDir路径&#xff0c…

0802|IO进程线程day5 作业(打印时钟在终端上,若终端输入quit,结束时钟)

作业1&#xff1a;守护进程 守护进程的创建&#xff08;5步&#xff09;&#xff1a; 创建孤儿进程&#xff1a;所有工作都在子进程中执行&#xff0c;从形式上脱离终端控制。 fork(), 退出父进程 创建新的会话组&#xff1a;使子进程完全独立出来&#xff0c;防止兄弟进程对其…

蓝桥杯上岸必背!!!(并查集补更)

蓝桥杯上岸必背&#xff01;&#xff01;&#xff01;(并查集补更) 大家好 我是寸铁&#x1f4aa; 冲刺蓝桥杯省一模板大全来啦 &#x1f525; 蓝桥杯4月8号就要开始了 &#x1f64f; 距离蓝桥杯省赛倒数第3天 ❗️ ❗️ ❗️ 还没背熟模板的伙伴们背起来 &#x1f4aa; &…