博客
关于我
AcWing 95. 费解的开关 二进制全排列+思维
阅读量:578 次
发布时间:2019-03-09

本文共 1863 字,大约阅读时间需要 6 分钟。

你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。

我们用数字“1”表示一盏开着的灯,用数字“0”表示关着的灯。下面这种状态

1011101101101111000011011

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

0111111101101111000011011

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

0111111001110011010011011

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

输入格式

第一行输入正整数n,代表数据中共有n个待解决的游戏初始状态。

以下若干行数据分为n组,每组数据有5行,每行5个字符。每组数据描述了一个游戏的初始状态。各组数据间用一个空行分隔。

输出格式

一共输出n行数据,每行有一个小于等于6的整数,它表示对于输入数据中对应的游戏状态最少需要几步才能使所有灯变亮。

对于某一个游戏初始状态,若6步以内无法使所有灯变亮,则输出“-1”。

数据范围

0<n≤500
输入样例:

3001110101110001110101110011101111011111011111111110111111111111111111111111

输出样例:

32-1

思路

这道题确实很有难度,y总给出了一个思路,将第一行锁死,然后从第一行开始从第一行到第四行只要遇到0就改变下一行的灯,也就是说第一行的位置确定,得到的灯泡亮度图也是确定的,不亮的灯只会出现在最后一行,因为前四行都被我们改变全部都是亮的,第一行有25=32中方案,我们依次枚举这些方案,然后判断一共需要多少步并且是否可以达到目标状态,题目中说最少在6步以内并且全部都是开的。

主要思想

全排列

代码如下

#include
#include
#include
using namespace std;const int N=10;char g[N][N],bg[N][N];int dx[5]={ 0,0,0,1,-1},dy[5]={ 1,-1,0,0,0};void turn(int x,int y){ for(int i=0;i<5;i++) { int tx=x+dx[i]; int ty=y+dy[i]; if(tx>=0&&ty>=0&&tx<5&&ty<5) { bg[tx][ty]='1'-bg[tx][ty]+'0'; } }}int main(void){ int n; scanf("%d",&n); while(n--) { for(int i=0;i<5;i++) scanf("%s",g[i]); int res=10; for(int i=0;i<32;i++) { memcpy(bg,g,sizeof g); int cnt=0; for(int j=0;j<5;j++) { if(i>>j&1) turn(0,j),cnt++; } for(int j=0;j<4;j++) { for(int p=0;p<5;p++) { if(bg[j][p]=='0') turn(j+1,p),cnt++; } } bool flag=true; for(int j=0;j<5;j++) if(bg[4][j]=='0') flag=false; if(flag&&cnt

转载地址:http://phkpz.baihongyu.com/

你可能感兴趣的文章
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>