POJ 1222 EXTENDED LIGHTS OUT(高斯消元解XOR方程组)

时间:2021-06-21 12:36:57

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 &lpar;高斯消元&rpar;

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

  2. POJ 1222 EXTENDED LIGHTS OUT &lbrack;高斯消元XOR&rsqb;

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

  3. 【高斯消元解xor方程组】BZOJ2466-&lbrack;中山市选2009&rsqb;树

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

  4. 【高斯消元解xor方程】BZOJ1923-&lbrack;Sdoi2010&rsqb;外星千足虫

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

  5. poj1830&lpar;高斯消元解mod2方程组&rpar;

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

  6. poj1753&lpar;高斯消元解mod2方程组&rpar;

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

  7. poj1222 EXTENDED LIGHTS OUT 高斯消元&vert;&vert;枚举

    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&gt ...

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

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

随机推荐

  1. 移动端开发viewport深入理解(转)

    一.viewport的概念   移动设备上的viewport就是设备的屏幕上能用来显示我们的网页的那一块区域,就是浏览器上用来显示网页的那部分区域,但viewport不局限于浏览器可视区域 的大小,它 ...

  2. eclipse设置字体、背景&lpar;豆绿&rpar;色、自动提示

    背景色:(护眼豆绿色) window-->preferences-->General-->Editors-->Text Editors-->(最下遍一栏中的)Backgr ...

  3. BroadcastReceiver&period;PendingResult类别

    java.lang.Object android.content.BroadcastReceiver.PendingResul 类概述 状态的结果正在等待一个广播接收器.在BroadcastRecei ...

  4. VS2015 使用Xunit来进行单元测试

    安装Xunit: Xunit的安装现在不需要插件支持了,直接使用NuGet安装如下两个库即可: PM> Install-Package xunit PM> Install-Package ...

  5. Vuforia的图像识别之后的服务器下载与ARKit的兼容性解决

    2017.12.12 遇到的问题: Could not produce class with ID 75 直接关闭unity里面的Strip engine code,解决下载ab时的崩溃问题 *Str ...

  6. js click 与 onclick 事件绑定&comma;触发与解绑

    click 与 onclick 1.onclick 事件会在对象被点击时发生. <input id="btn1" type="button" onclic ...

  7. 微信小程序生成二维码

    微信小程序客户端生成二维码的方法, 请参考这里: https://github.com/demi520/wxapp-qrcode  代码片段如下: const QR = require(". ...

  8. vue中打包生成可配置文件以便修改接口地址

    vue打包上传到服务器之后,如果数据接口域名发生变化,需要手动修改接口地址,在发布的时候也麻烦,于是.. 在打包之后如果有一个json配置文件以便修改那不是方便很多 在网上找了一些方法貌似都是异步请求 ...

  9. a new way of thinking about a problem

    PHP Advanced and Object-Oriented Programming Larry Ullman   The first thing that you must understand ...

  10. Miller&lowbar;Rabin&lpar;米勒拉宾&rpar;素数测试算法

    首先需要知道两个定理: 1: 费马小定理: 假如p是素数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p). 2:二次探测定理:如果p是素数,x是小于p的正整数,且,那么要么x=1,要么x ...