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 ‘×’ 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 ‘×’ 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’s or ‘1’s 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’s 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 Ouput 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

高斯消元xor。。。

保证有解了,那么直接消元,就可以了

#include<bits/stdc++.h>
using namespace std;
const int N = ;
const int dx[] = {-, , , }, dy[] = {, , -, };
#define id(i, j) (i - 1) * 6 + j
int a[N + ][N + ];
void build()
{
memset(a, , sizeof(a));
for(int i = ; i <= ; ++i)
for(int j = ; j <= ; ++j)
for(int k = ; k < ; ++k)
{
int x = i + dx[k], y = j + dy[k];
if(x > && x <= && y > && y <= ) a[id(i, j)][id(x, y)] = a[id(x, y)][id(i, j)] = ;
}
}
void gauss_jordan()
{
for(int now = ; now <= N; ++now)
{
int x = ;
for(int i = now; i <= N; ++i) if(a[i][now] == ) { x = i; break; }
if(!x) continue;
for(int i = ; i <= N + ; ++i) swap(a[now][i], a[x][i]);
for(int i = ; i <= N; ++i) if(i != now && a[i][now])
for(int j = ; j <= N + ; ++j) a[i][j] ^= a[now][j];
}
}
int main()
{
int T; scanf("%d", &T);
for(int kase = ; kase <= T; ++kase)
{
build();
for(int i = ; i <= N; ++i) scanf("%d", &a[i][N + ]), a[i][i] = ;
gauss_jordan();
printf("PUZZLE #%d\n", kase);
for(int i = ; i <= ; ++i)
{
for(int j = ; j < ; ++j) printf("%d ", a[(i - ) * + j][N + ]);
printf("%d\n", a[i * ][N + ]);
}
}
return ;
}

uva1560的更多相关文章

随机推荐

  1. day21 05 员工信息表

    day21 05 员工信息表 假设有一个员工信息表,里面有每个员工的名字,id,年龄,电话,还有他们所作的工作,而有时候我们并不需要所有的信息,而想根据某些条件,寻找符合条件即可,即筛选, 比如想要筛 ...

  2. NOI模拟(3.6)Assignment

    Description 随机生成一个长度为m且每个元素都为1~n之间的整数的单调不下降序列~(即序列的(i>1)都不小于),(随机生成指每一种可能的序列都等概率被生成).请问这个序列的众数出现次 ...

  3. 【BZOJ2440】完全平方数(莫比乌斯函数,容斥原理)

    题意:求第k个无平方因子数 k<=10^9 思路: 感觉这东西和欧拉筛差不多……活到老学到老,退役前学点新知识也是好的 为什么二分答案的上界是2*n?连LYY都证不出来 话说约大爷一年之前就已经 ...

  4. ehcache、memcache、redis三大缓存比较

    最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存的优缺点,仅供参考!  Ehcache 在Java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS ...

  5. Core java for impatient 笔记

    类比c++来学习! 1.在java 中变量不持有对象,变量持有的是对象的引用,可以把变量看做c++中的只能指针,自动管理内存 需要手动初始化(否则就是空指针!) 2.final 相当于c++中的con ...

  6. int *ptr=(int *)(&a+1)问题的探讨

    从网络上看到这样一道有意思的题目,是关于数组与指针的问题,描述如下: main() { ]={,,,,}; ); printf(),*(ptr-)); } 输出为:2,5 请解释以上代码的输出结果. ...

  7. Ubuntu 16.04安装Ubuntu After Install工具实现常用软件批量安装

    这个软件集成了常用且好用的软件,且只需要选择需要的软件之后自动安装好,不需要额外设置. 安装: sudo add-apt-repository ppa:thefanclub/ubuntu-after- ...

  8. tomcat8.5.20配置https

    一.使用cmd下生成证书: d: cd d:/java/jdk/jdk1.8 keytool -v -genkey -alias tomcat -keyalg RSA -keystore D:\jav ...

  9. dataTables 添加行内操作按钮

    在上一篇博客中我们提到了用dataTables 做一个分页表格.今天进一步进阶,做一个行内带操作按钮的表格.效果如图. 记得最基础的实现方式是,我们要在js 中拼接字符串,嵌入一个带按钮的语句.但是现 ...

  10. 将github上的项目源码导入eclipse详细教程

    将github上的项目源码导入eclipse详细教程 学习了: http://blog.csdn.net/itbiggod/article/details/78462720