OpenJudge2811:熄灯问题(枚举)
熄灯问题
有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上边、下边、左边、右边)的灯都会改变一次。即,如果灯原来是点亮的,就会被熄灭;如果灯原来是熄灭的,则会被点亮。在矩阵角上的按钮改变3盏灯的状态;在矩阵边上的按钮改变4盏灯的状态;其他的按钮改变5盏灯的状态。
输入
5行组成,每一行包括6个数字(0或1)。相邻两个数字之间用单个空格隔开。0表示灯的初始状态是熄灭的,1表示灯的初始状态是点亮的。
输出
5行组成,每一行包括6个数字(0或1)。相邻两个数字之间用单个空格隔开。其中的1表示需要把对应的按钮按下,0则表示不需要按对应的按钮。
样例输入
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
样例输出
1 0 1 0 0 1
1 1 0 1 0 1
0 0 1 0 1 1
1 0 0 1 0 0
0 1 0 0 0 0
大致思路
枚举第一行的操作,在每个的下一行全部将上一行的没有关闭的灯熄灭,最后根据最后一行的灯的状态来判断是否完成。
//定义两个数组分别记录初始状态和操作
//定义函数判断当前位置经过各种操作后的灯的状态
//枚举第一行的所有情况
//每一行都将上一行未熄灭或者点亮的灯熄灭
//操作完成后判断最后一行是否全部熄灭,若没有则继续枚举
题解代码
#include<bits/stdc++.h>
using namespace std;
int arr[10][10];
int op[10][10];
int getState(int x, int y)
{
return (arr[x][y] + op[x][y] + op[x+1][y] + op[x-1][y] + op[x][y+1] + op[x][y-1]) & 1;
}
void print()
{
//输出最终的操作矩阵
for(int i = 1; i <= 5; i++){
for(int j = 1; j <= 6; j++){
cout << op[i][j] << ' ';
//cout << getState(i, j) << ' ';
}
cout << endl;
}
}
bool check()
{
//检查最后一行是否为全0
for(int i = 1; i <=6; i++){
if(getState(5, i) == 1) return false;
}
return true;
}
bool findFirst(int n)
{
//对第一行进行操作并对后续行完成后续操作
int cnt = 1;
while(n){
op[1][cnt] = n & 1;
n >>= 1;
cnt++;
}
for(int i = 2; i <= 5; i++){
for(int j = 1; j <= 6; j++){
if(getState(i-1, j) == 1) op[i][j] = 1;
else op[i][j] = 0;
}
}
/*print();
cout << "----------\n";*/
return check();
}
int main(){
memset(arr, 0, sizeof arr);
for(int i = 1; i <= 5; i++){
for(int j = 1; j <= 6; j++){
cin >> arr[i][j];
}
}
for(int i = 0; i < 64; i++){// 总共有6列灯,2^6种情况
memset(op, 0, sizeof op);
if(findFirst(i)){
print();
break;
}
}
return 0;
}
OpenJudge2811:熄灯问题(枚举)的更多相关文章
- POJ1222熄灯问题【位运算+枚举】
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14231 Accepted: 8 ...
- ACM/ICPC 之 枚举(POJ1681-画家问题+POJ1166-拨钟问题+POJ1054-讨厌的青蛙)
POJ1681-画家问题 枚举的经典例题,枚举第一行即可,其余行唯一. //画家问题,y表示黄色,w表示白色,怎样让墙上所有方格为y,操作类似熄灯问题poj1222 //memory 136K Tim ...
- 熄灯问题 --POJ 2811-ACM
问题描述 盏灯的状态. 列的灯的状态就不改变. 请你写一个程序,确定需要按下哪些按钮,恰好使得所有的灯都熄灭.根据上面的规则,我们知道: 次按下时所产生的结果.因此,每个按钮最多只需要按下一次: (2 ...
- Swift enum(枚举)使用范例
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)
建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...
- Objective-C枚举的几种定义方式与使用
假设我们需要表示网络连接状态,可以用下列枚举表示: enum CSConnectionState { CSConnectionStateDisconnected, CSConnectionStateC ...
- Help Hanzo (素数筛+区间枚举)
Help Hanzo 题意:求a~b间素数个数(1 ≤ a ≤ b < 231, b - a ≤ 100000). (全题在文末) 题解: a~b枚举必定TLE,普通打表MLE,真是头疼 ...
- 枚举:enum
枚举 所谓枚举就是指定好取值范围,所有内容只能从指定范围取得. 例如,想定义一个color类,他只能有RED,GREEN,BLUE三种植. 使用简单类完成颜色固定取值问题. 1,就是说,一个类只能完成 ...
- .NET 基础一步步一幕幕[方法、结构、枚举]
方法.结构.枚举 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值,写void 方法名:P ...
- Asp.Net 将枚举类型(enum)绑定到ListControl(DropDownList)控件
在开发过程中一些状态的表示使用到枚举类型,那么如何将枚举类型直接绑定到ListControl(DropDownList)是本次的主题,废话不多说了,直接代码: 首先看工具类代码: /// <su ...
随机推荐
- eclipse的快捷键都有哪些
非常实用的快捷键 Ctrl+D: 删除当前行 Ctrl+Alt+↓: 复制当前行到下一行 Ctrl+Alt+↑: 复制当前行到上一行 Alt+↓: 当前行和下面一行交互位置 Alt+↑: 当前行和上面 ...
- window stm32 mcu 调试
1.ARM内核的MCU开发和调试 1.通过keil + jlink(segger) 进行调试 2.通过arm-gdb+openocd+jlink调试 3.通过jtag 进行调试(电路不复杂,硬件只需要 ...
- Unity生成AB包和加载AB包
unity生成AB包 生产AB包,编辑器脚本放在Editor文件夹下(切记) 如果你是PC包 BuildTarget.WebGL 后面要改成PC (BuildTarget.StandaloneWin ...
- usbip:(一)初识
USB/IP 总结 一.概要: USB/IP项目的目标是为用户提供通过网络远程访问usb设备的能力.在用户看来,访问usb设备和访问插入到本地电脑的设备没什么区别,该项目是开源的,可以用过适当的配 ...
- sudo: port: command not found 报错解决方案
mac本安装graphviz的方法是: sudo port install graphviz 执行报错: sudo: port: command not found 其实是未设置环境变量,执行下面的语 ...
- 解决tomcat8080端口占用问题
解决tomcat8080端口占用问题 1. 使用管理员权限打开cmd 2. 输入 netstat -ano | findstr 8080 找出占用8080端口的进程pid netstat -ano | ...
- 安装S32 Design Studio及简单操作
安装S32 Design Studio及简单操作 说明:安装所需要的安装包均在此文件中,安装流程及基本操作按照入门手册PDF进行即可,以下着重记录所学基本操作流程,安装流程省略 安装: 安装流程 按照 ...
- 20211306 《Python程序设计》实验三报告
学号 20211306 <Python程序设计>实验三报告 课程:<Python程序设计> 班级: 2113 姓名: 丁文博 学号:20211306 实验教师:王志强 实验日期 ...
- 第一次写代码(Hellowold)
Helloword 新建一个code文件夹,存放代码 新建一个hava文件 文件后缀名为java 编写代码 java 1. public class Hello{ public static ...
- 将map转为Bean的工具类 BeanUtil
Map<String,Object> pbclwhMainMap = (Map<String,Object>)param.get("pbclwhMain") ...