EXTENDED LIGHTS OUT

Time Limit: 1000MS Memory Limit: 10000K

Total Submissions: 12956 Accepted: 8186

Description

In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual puzzle has 5 rows of 5 buttons each). Each button has a light. When a button is pressed, that button and each of its (up to four) neighbors above, below, right and left, has the state of its light reversed. (If on, the light is turned off; if off, the light is turned on.) Buttons in the corners change the state of 3 buttons; buttons on an edge change the state of 4 buttons and other buttons change the state of 5. For example, if the buttons marked X on the left below were to be pressed,the display would change to the image on the right.



The aim of the game is, starting from any initial set of lights on in the display, to press buttons to get the display to a state where all lights are off. When adjacent buttons are pressed, the action of one button can undo the effect of another. For instance, in the display below, pressing buttons marked X in the left display results in the right display.Note that the buttons in row 2 column 3 and row 2 column 5 both change the state of the button in row 2 column 4,so that, in the end, its state is unchanged.

Note:

1. It does not matter what order the buttons are pressed.

2. If a button is pressed a second time, it exactly cancels the effect of the first press, so no button ever need be pressed more than once.

3. As illustrated in the second diagram, all the lights in the first row may be turned off, by pressing the corresponding buttons in the second row. By repeating this process in each row, all the lights in the first

four rows may be turned out. Similarly, by pressing buttons in columns 2, 3 ?, all lights in the first 5 columns may be turned off.

Write a program to solve the puzzle.

Input

The first line of the input is a positive integer n which is the number of puzzles that follow. Each puzzle will be five lines, each of which has six 0 or 1 separated by one or more spaces. A 0 indicates that the light is off, while a 1 indicates that the light is on initially.

Output

For each puzzle, the output consists of a line with the string: “PUZZLE #m”, where m is the index of the puzzle in the input file. Following that line, is a puzzle-like display (in the same format as the input) . In this case, 1’s indicate buttons that must be pressed to solve the puzzle, while 0 indicate buttons, which are not pressed. There should be exactly one space between each 0 or 1 in the output puzzle-like display.

Sample Input

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

Sample Output

PUZZLE #1

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

PUZZLE #2

1 0 0 1 1 1

1 1 0 0 0 0

0 0 0 1 0 0

1 1 0 1 0 1

1 0 1 1 0 1


解题心得:

  1. 给你一个五行六列的矩阵,你可以选择一个元素进行0-1反转,如果反转当前元素那么和这个元素相邻的四个方向(上下左右)的元素也会进行反转。现在要你输出一个反转的方案,要将原矩阵变成全0矩阵。
  2. 就是一个矩阵反转问题,可以去看,上面已经说了相同的矩阵反转问题。

#include <algorithm>
#include <stdio.h>
#include <climits>
#include <cstring>
using namespace std;
const int maxn = 10;
const int r = 5;
const int c = 6; int flip[maxn][maxn],opt[maxn][maxn],tile[maxn][maxn];
int dir[5][2] = {1,0,0,1,0,0,-1,0,0,-1}; void init() {
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
scanf("%d",&tile[i][j]);
} bool check(int x,int y) {//检查是否超出矩阵范围
if(x < 0 || y < 0 || x >= r || y >= c)
return true;
return false;
} bool get(int x,int y) {//检查同一列上一行的位置是否需要反转
int cnt = tile[x][y];
for(int i=0;i<5;i++) {
int xx = x + dir[i][0];
int yy = y + dir[i][1];
if(check(xx,yy))
continue;
cnt += flip[xx][yy];
}
if(cnt%2)
return true;
return false;
} bool cal() {
for(int i=1;i<r;i++) {
for(int j=0;j<c;j++) {
if(get(i-1,j)) {
flip[i][j] = 1;
}
}
} for(int i=0;i<c;i++) {
if(get(r-1,i))
return true;
}
return false;
} void solve() {
for(int i=0;i<(1<<6);i++) {
memset(flip,0,sizeof(flip));
for(int j=0;j<c;j++) {//枚举第一行
if (1 & (i >> j))
flip[0][j] = 1;
}
if(cal())//向下反转
continue;
memcpy(opt,flip,sizeof(flip));//如果符合就保存起来
break;
}
} void Print(int T) {
printf("PUZZLE #%d\n",T);
for(int i=0;i<r;i++)
for(int j=0;j<c;j++) {
printf("%d%c",opt[i][j],j == c-1? '\n' : ' ');
}
} int main() {
int t,T = 1;
scanf("%d",&t);
while(t--) {
init();
solve();
Print(T++);
}
return 0;
}

POJ:1222-EXTENDED LIGHTS OUT(矩阵反转)的更多相关文章

  1. POJ 1222 EXTENDED LIGHTS OUT(反转)

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12616   Accepted: 8 ...

  2. POJ 1222 EXTENDED LIGHTS OUT(翻转+二维开关问题)

    POJ 1222 EXTENDED LIGHTS OUT 今天真是完美的一天,这是我在poj上的100A,留个纪念,马上就要期中考试了,可能后面几周刷题就没这么快了,不管怎样,为下一个200A奋斗, ...

  3. POJ 1222 EXTENDED LIGHTS OUT(高斯消元解异或方程组)

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10835   Accepted: 6 ...

  4. Poj 1222 EXTENDED LIGHTS OUT

    题目大意:给你一个5*6的格子,每个格子中有灯(亮着1,暗着0),每次你可以把一个暗的点亮(或者亮的熄灭)然后它上下左右的灯也会跟着变化.最后让你把所有的灯熄灭,问你应该改变哪些灯. 首先我们可以发现 ...

  5. POJ 1222 EXTENDED LIGHTS OUT(高斯消元)题解

    题意:5*6的格子,你翻一个地方,那么这个地方和上下左右的格子都会翻面,要求把所有为1的格子翻成0,输出一个5*6的矩阵,把要翻的赋值1,不翻的0,每个格子只翻1次 思路:poj 1222 高斯消元详 ...

  6. poj 1222 EXTENDED LIGHTS OUT(位运算+枚举)

    http://poj.org/problem?id=1222 题意:给一个确定的5*6放入矩阵.每一个格子都有一个开关和一盏灯,0表示灯没亮,1表示灯亮着.让你输出一个5*6的矩阵ans[i][j], ...

  7. 【高斯消元】Poj 1222:EXTENDED LIGHTS OUT

    Description In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each ...

  8. OpenJudge 2811 熄灯问题 / Poj 1222 EXTENDED LIGHTS OUT

    1.链接地址: http://bailian.openjudge.cn/practice/2811 http://poj.org/problem?id=1222 2.题目: 总时间限制: 1000ms ...

  9. POJ 1222 EXTENDED LIGHTS OUT(高斯消元)

    [题目链接] http://poj.org/problem?id=1222 [题目大意] 给出一个6*5的矩阵,由0和1构成,要求将其全部变成0,每个格子和周围的四个格子联动,就是说,如果一个格子变了 ...

  10. POJ 1222 EXTENDED LIGHTS OUT (熄灯问题)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8417   Accepted: 5441 Description In an ...

随机推荐

  1. Python人工智能之初识接口

    本节需要的两个工具: 1.FFmpeg: 链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密码:w6hk 2.baidu-aip: pip ins ...

  2. SublimeText插件vue Syntax Highlight : vue语法高亮

    参考:http://www.cnblogs.com/cosnyang/p/6290950.html Vue.js 的单文件组件(*.vue)在 sublime 编辑器中是不被识别的.若要想高亮显示,需 ...

  3. Maven 私有库和本地库的安装与配置 Sonatype Nexus + Maven

    环境:CentOS 7.0 Final.JDK8.Sonatype Nexus.Maven 虚拟机模拟IP:192.168.16.167 备注:root权限用户操作 前提:已安装 JDK8 并配置好了 ...

  4. 聪明的Azure CDN,帮你找到云端捷径

    你知道吗?身处上海和纽约的两个用户同时通过网络收看“春晚”直播,纽约播放得可能比上海还要更流畅,这当然不是因为纽约距离北京的直播机房更近或者网速更快,而是因为大年夜在大洋彼岸围观“春晚”的观众相对较少 ...

  5. ASP.NET Core - 各项配置

    之前搭建好了各项开发环境,现在来说说ASP.NET Core的各项配置.项目结构.以及在请求管道中挂载的各式各样的中间件.今天先来探讨探讨其各项配置及其项目结构   ASP.NET Core和上一代F ...

  6. 笨办法学Python(五)

    习题 5: 更多的变量和打印 我们现在要键入更多的变量并且把它们打印出来.这次我们将使用一个叫“格式化字符串(format string)”的东西. 每一次你使用 " 把一些文本引用起来,你 ...

  7. OpenGL学习 Our First OpenGL Program

    This shows you how to create the main window with the book’s application framework and how to render ...

  8. 那些年我用过的SAP IDE

    在Google上根据关键字"程序员鄙视链"搜索,会得到68多万条结果. 玲琅满目的搜索结果里是众多不同维度划分的鄙视链. 其中有一个维度,就是编程工具的鄙视链,比如: 而我在SAP ...

  9. poj 2112 Optimal Milking 奶牛

    题目链接:http://poj.org/problem?id=2112 题意:K个产奶机,C头奶牛,每个产奶机最多可供M头奶牛使用:并告诉了产奶机.奶牛之间的两两距离Dij(0<=i,j< ...

  10. 模拟停车POJ(3505)

    题目链接:http://poj.org/problem?id=3505 解题报告: #include <stdio.h> #include <iostream> #includ ...