算法入门:熄灯问题

2023-11-14

#include<memory>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
char oriLights[5];
char lights[5];
char result[5];
int GetBit(char c,int i)
{
	return (c>>i)&1;
}
void SetBit(char & c,int i, int v)
{
	if(v){
		c|=(1<<i);
	}
	else{
		c&=~(1<<i);
	}
}
void FlipBit(char &c,int i)
{
	c^=(1<<i);
}
void OutputResult(int t,char result[])
{
	cout<<"PUZZLE #"<<t<<endl;
	for(int i=0;i<5;i++)
	{
		for(int j=0;j<6;j++)
		{
			cout<<GetBit(result[i],j);
			if(j<5)
				cout <<" ";
		}
		cout<<endl;
	}
}
int main()
{
	int T;
	cin>>T;
	for(int t=1;t<=T;t++)
	{
		for(int i=0;i<5;i++)
		{
			for(int j=0;j<6;j++)
			{
				int s;
				cin>>s;
				SetBit(oriLights[i],j,s);

			}

		}
		for(int n=0;n<64;n++)
		{
			int switchs=n;
			memcpy(lights,oriLights,sizeof(oriLights));
			for(int i=0;i<5;i++)
			{
				result[i]=switchs;
				for(int j=0;j<6;j++)
				{
					if(GetBit(switchs,j))
					{
						if(j>0)
							FlipBit(lights[i],j-1);
						FlipBit(lights[i],j);
						if(j<5)
							FlipBit(lights[i],j+1);

					}
				}
				if(i<4)
				{
					lights[i+1]^=switchs;
				}
				switchs=lights[i];
			}
			if(lights[4]==0)
			{
				OutputResult(t,result);
				break;
			}
		}
	}
	return 0;
}
/*
2
0 1 1 0 1 0
1 0 0 1 1 1
0 0 1 0 0 1
1 0 0 1 0 1
0 1 1 1 0 0
0 0 1 0 1 0
1 0 1 0 1 1
0 0 1 0 1 1 
1 0 1 1 0 0
0 1 0 1 0 0
*/



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法入门:熄灯问题 的相关文章

随机推荐

  • 秋叶一键重装系统连接服务器失败,秋叶一键重装系统win7系统安装和使用DAEMONToolsLite的方法【图文教程】...

    DAEMON Tools Lite是一款虚拟光驱工具 装完不需启动即可用 是一个非常先进的模拟备份以及合并保护盘的软件 但是有部分win7秋叶系统用户还不知道要怎么安装和使用DAEMON Tools Lite 针对这个情况 小编这就给大家分
  • 保研日记v

    目录 个人情况 夏令营情况 预推免情况 希望能对学弟学妹们能有一定的参考价值 同样也是为了本科前三年画上一个句号 有问题可以直接留言哈 认识我的话可以直接小窗私戳我 即便困惑你的是很小的问题也希望大家能够勇敢的开口问 因为走了很多弯路 也在
  • 我优化了进度条,页面性能竟提高了70%

    前言 大家好 我是零一 最近我准备在组里进行代码串讲 所以我梳理了下项目之前的业务代码 在梳理的过程中 我看到了有个进度条组件写的非常好 这又想起我刚开始学前端时写的进度条的代码 跟这个比起来真的差距太大了 大部分的初学者应该都想不到 而且
  • 程序员常用的命令

    写在前面 你们好 我是小庄 很高兴能和你们一起学习常用命令 如果您对Java感兴趣的话可关注我的动态 写博文是一种习惯 在这过程中能够梳理和巩固知识 常用的Linux命令 cd 改变目录 cd 回退到上一级目录 直接cd进入默认目录 pwd
  • Vulkan_片元着色器特效5(泛光Bloom)

    本部分主要结合上一部分的Vulkan 片元着色器特效4 高动态范围HDR 来综合展示HDR 泛光场景 主要参照 LearnOpenGL中的Bloom章节 一 基本原理 Bloom使我们能够注意到一个明亮的物体真的有种明亮的感觉 泛光可以极大
  • ctfshow web入门——web2

    无法查看源代码 点击右键确实不行 直接ctrl u查看即可 但这个也可以用另一种方法查看网页源代码 即在网页url前面 view source
  • stream详解

    Java中的Stream流 公司中用了很多Stream流 经常用来筛选出PO类型的List中想要的数据 所以还是比较常用的 Stream是Java8的新成员 允许以声明式方式处理数据集合 代码简洁 函数式编程写出的代码简洁且意图明确 使用s
  • ML-逻辑回归-Softmax-交叉熵(小航)

    在分类问题中 交叉熵的本质就是 对数 似然函数的最大化 逻辑回归的损失函数的本质就是 对数 似然函数的最大化 最大似然估计讲解 https www jianshu com p 191c029ad369 参考统计学习方法笔记 P79 soft
  • Svelte3聊天室

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 基于svelt
  • 服务器的日常运维巡检视频,日常运维检查记录表

    日常运维检查记录表 2页 本资源提供全文预览 点击全文预览即可全文预览 如果喜欢文档就下载吧 查找使用更方便哦 19 90 积分 日常运维检查记录表检查分类检查分类检查对像检查对像检查内容检查内容检查结果检查结果备注备注检查通道检测卡上各部
  • 关于KEIL MDK调试ARM程序不能仿真的问题

    在单片机程序调试过程中 由于程序量小 利用仿真器进行仿真调试方便直观 所以一般经常使用 但是keil经常会出现罢工 无法用仿真器调试的现象 如下图 解决方法也很简单 按照下图设置即可
  • BigDecimal类型加减乘除运算(Java必备知识)

    在现实开发当中经常会遇到这种计算 这里特此整理一下为方便以后学习 希望能帮助到其他的萌新 目录 1 为什么要用BigDecimal计算 2 浮点计算误差产生的原因 3 bigdecimal的初始化 4 bigdecimal的加减乘除 5 除
  • 【深度学习】小概念

    好用小工具 https lutzroeder github io netron 网络架构图可视化工具 liner probe与fine tune liner probe 将预训练的模型冻住 只从里面抽特征 就训练最后fc分类头层 做有监督的
  • 粒子群算法4——粒子群算法与蚁群算法的异同点

    作者 莫石 链接 http www zhihu com question 30326374 answer 59884351 来源 知乎 著作权归作者所有 转载请联系作者获得授权 群体智能算法家族的两个重要成员就是粒子群算法与蚁群算法 基本思
  • ros+arduino学习(六):重构ros_lib库文件

    前言 ros lib是arduino程序和ros连接的库文件 通过使用这些库文件和相关函数 可以在arduino上通过编程使得arduino硬件开ros节点程序 这样arduino硬件就可以与上位机通过话题进行通讯 从而把arduino从传
  • Spring配置构造函数的参数

    Spring配置构造函数的参数 参考 http blog csdn net u013473691 article details 50589021
  • sonar代码检查_代码质量管理工具:SonarQube常见的问题及正确解决方案(一)

    SonarQube 简介 Sonar 是一个用于代码质量管理的开放平台 通过插件机制 Sonar 可以集成不同的测试工具 代码分析工具 以及持续集成工具 与持续集成工具 例如 Hudson Jenkins 等 不同 Sonar 并不是简单地
  • 剑指 Offer 28. 对称的二叉树 -- 递归

    0 题目描述 leetcode原题链接 剑指 Offer 28 对称的二叉树 1 递归解法 对称二叉树定义 对于树中 任意两个对称节点 L L L 和 R R R 一定有
  • 【linux】redhat笔记:redhat入门操作

    登录界面 普通用户 root 一直点next 搜索执行任务 切换任务 鼠标点击 win键或者点击activity 会显示所有任务 控制窗口 最大化窗口 拖动窗口置顶部 取消最大化 拖动回去 分屏 拖动置左右 win 上下左右 控制窗口 要求
  • 算法入门:熄灯问题

    include