http://poj.org/problem?id=1222

题意:
现在有5*6的开关,1表示亮,0表示灭,按下一个开关后,它上下左右的灯泡会改变亮灭状态,要怎么按使得灯泡全部处于灭状态,输出方案,1表示按,0表示不按。

思路:
每个开关最多只按一次,因为按了2次之后,就会抵消了。

可以从结果出发,也就是全灭状态怎么按能变成初始状态。

用3*3来举个例子,$X\left ( i,j \right )$表示这些开关是按还是不按,那么对于第一个开关,对它有影响的就只有2、4这两个开关,所以它的异或方程组就是:

$X\left ( 1,1 \right )*A\left ( 1,1 \right )  XOR  X\left ( 2,2 \right )*A\left ( 2,2 \right )...XOR  X\left ( 9,9 \right )*A\left ( 9,9 \right ) = $初始状态

这样一来就有30个异或方程组,高斯消元解一下即可。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn = + ; int ans[maxn];
int c[maxn][maxn]; void Gauss()
{
int i=,j=,k,r;
for(k=;k<;k++) //现在处理第k行
{
i=k;
while(c[i][k]== && i<) i++; //找到一行第k列元素不为0
if(i!=k) for(j=;j<=;j++) //交换两行
swap(c[k][j],c[i][j]); //消元与回代合并了
for(i=;i<;i++) if(k!=i && c[i][k])
for(j=k;j<=;j++) c[i][j]=c[k][j]^c[i][j];
}
for(int i=;i<;i++)
ans[i]=c[i][];
} int main()
{
//freopen("in.txt","r",stdin);
int T;
int kase=;
scanf("%d",&T);
while(T--)
{
memset(c,,sizeof(c));
for(int i=;i<;i++) scanf("%d",&c[i][]); for (int i=;i<;i++)
{
c[i][i]=;
if (i%!=) c[i-][i]=;
if (i%!=) c[i+][i]=;
if (i>) c[i-][i]=;
if (i<) c[i+][i]=;
} Gauss();
printf ("PUZZLE #%d\n",++kase);
for (int i=;i<;i++)
printf (i%==?"%d\n":"%d ",ans[i]);
}
return ;
}

POJ 1222 EXTENDED LIGHTS OUT(高斯消元解XOR方程组)的更多相关文章

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

    题目链接 题意:5*6矩阵中有30个灯,操作一个灯,周围的上下左右四个灯会发生相应变化 即由灭变亮,由亮变灭,如何操作使灯全灭? 题解:这个问题是很经典的高斯消元问题.同一个按钮最多只能被按一次,因为 ...

  2. POJ 1222 EXTENDED LIGHTS OUT [高斯消元XOR]

    题意: $5*6$网格里有一些灯告诉你一开始开关状态,按一盏灯会改变它及其上下左右的状态,问最后全熄灭需要按那些灯,保证有解 经典问题 一盏灯最多会被按一次,并且有很明显的异或性质 一个灯作为一个方程 ...

  3. 【高斯消元解xor方程组】BZOJ2466-[中山市选2009]树

    [题目大意] 给出一棵树,初始状态均为0,每反转一个节点的状态,相邻的节点(父亲或儿子)也会反转,问要使状态均为1,至少操作几次? [思路] 一场大暴雨即将来临,白昼恍如黑夜!happy! 和POJ1 ...

  4. 【高斯消元解xor方程】BZOJ1923-[Sdoi2010]外星千足虫

    [题目大意] 有n个数或为奇数或为偶数,现在进行m次操作,每次取出部分求和,告诉你这几次操作选取的数和它们和的奇偶性.如果通过这m次操作能得到所有数的奇偶性,则输出进行到第n次时即可求出答案:否则输出 ...

  5. poj1830(高斯消元解mod2方程组)

    题目链接:http://poj.org/problem?id=1830 题意:中文题诶- 思路:高斯消元解 mod2 方程组 有 n 个变元,根据给出的条件列 n 个方程组,初始状态和终止状态不同的位 ...

  6. poj1753(高斯消元解mod2方程组)

    题目链接:http://poj.org/problem?id=1753 题意:一个 4*4 的棋盘,初始时上面放满了黑色或白色的棋子.对 (i, j) 位置进行一次操作后 (i, j), (i + 1 ...

  7. poj1222 EXTENDED LIGHTS OUT 高斯消元||枚举

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8481   Accepted: 5479 Description In an ...

  8. POJ1222 EXTENDED LIGHTS OUT 高斯消元 XOR方程组

    http://poj.org/problem?id=1222 在学校oj用搜索写了一次,这次写高斯消元,haoi现场裸xor方程消元没写出来,真实zz. #include<iostream> ...

  9. POJ 1222【异或高斯消元|二进制状态枚举】

    题目链接:[http://poj.org/problem?id=1222] 题意:Light Out,给出一个5 * 6的0,1矩阵,0表示灯熄灭,反之为灯亮.输出一种方案,使得所有的等都被熄灭. 题 ...

随机推荐

  1. [py]python的私有变量

    参考 python中并没有真正意义上的私有成员,它提供了在成员前面添加双下划线的方法来模拟类似功能.具体来说: _xxx 表示模块级别的私有变量或函数 __xxx 表示类的私有变量或函数 这被称为na ...

  2. javascript产生对象(不建议看)

    产生对象的方式:一.new+构造函数1.JavaScript的内置构造函数,如Date(),Function(),Array(),Object()2.自定义的构造函数二.对象字面量{}三.继承 用 v ...

  3. [LeetCode] 832. Flipping an Image_Easy

    Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resu ...

  4. Tesseract-OCR 训练过程 V3.02

    软件: jTessBoxEditor Version 0.9 (30 April 2013) Tesseract-OCR win32 v3.02 with Leptonica   训练步骤:   1. ...

  5. Http请求中Content-Type和Accept讲解以及在Spring MVC中的应用

    在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值,以及在 ...

  6. iOS开发--沙盒

    IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件 ...

  7. php mysql_connect pmysql_connect区别

    <?php        mysql_pconnect('192.168.75.128', 'root', 'root');        mysql_close();        sleep ...

  8. Listener—监听器

    什么是监听器? 监听器是Web应用程序事件模型的一部分 监听器的作用? 1:Web应用中某些状态发生改变的时候会产生相应的事件: a)servletContext.HttpSession.Servle ...

  9. shell篇(一)

    login shell与non-login shell: login shell:取得shell时,需要完整的登入流程.如:tty1~tty6登入时,需要输入用户名和密码.此时取得的shell就称为l ...

  10. UVM中的regmodel建模(三)

    总结一下UVM中的寄存器访问实现: 后门访问通过add_hdl_path命令来添加寄存器路径,并扩展uvm_reg_backdoor基类,定义read与write函数,最后在uvm_reg_block ...