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

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
Output
翻译:给你一个5*6的初始状态,要求你给出一个5*6的操作矩阵,要求:当操作是1时,代表把棋盘的对应位置和它相邻的地方的状态改变(1变为0,0变为1),0则不进行操作。要求操作矩阵满足操作后棋盘状态全部为0.保证有解且唯一
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm> using namespace std; int f[][],ans[][],ga[][],cnt=; void print()
{
cnt++;
printf("PUZZLE #%d\n",cnt);
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
printf("%d ",ans[i][j]);
printf("\n");
}
} void Solve()
{
for(int i=;i>=;i--)
{
int x=i/+,y=i%;
if(!y) y+=,x--;
ans[x][y]=ga[i][];
for(int j=i+;j<=;j++)
if(ga[i][j]){
int x1=j/+,y1=j%;
if(!y1) y1+=,x1--;
ans[x][y]=ans[x][y]^ans[x1][y1];
}
}
} void swapp(int l,int r)
{
for(int i=;i<=;i++)
swap(ga[l][i],ga[r][i]);
} void find(int n)
{
for(int i=n+;i<=;i++)
if(ga[i][n]){swapp(i,n);return;}
} void Guass()
{
for(int i=;i<=;i++)//消第几个元
{
if(!ga[i-][i-])find(i-);
if(!ga[i-][i-])continue;
for(int j=i;j<=;j++)//第几个方程
{
if(!ga[j][i-])continue;
for(int k=i;k<=;k++)//方程的第几项
ga[j][k]=ga[j][k]^ga[i-][k];
}
}
Solve();
} void set()
{
for(int i=;i<=;i++)
for(int j=;j<=;j++){
ga[(i-)*+j][]=f[i][j];
ga[(i-)*+j][(i-)*+j]=; //自己和上下左右是对自己有影响的点
if(j!=) ga[(i-)*+j][(i-)*+j-]=;
if(j!=) ga[(i-)*+j][(i-)*+j+]=;
if(i!=) ga[(i-)*+j][i*+j]=;
if(i!=) ga[(i-)*+j][(i-)*+j]=;
}
return;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
scanf("%d",&f[i][j]);
set();
Guass();
print();
memset(f,,sizeof(f));
memset(ga,,sizeof(ga));
memset(ans,,sizeof(ans));
}
return ;
}
【高斯消元】Poj 1222:EXTENDED LIGHTS OUT的更多相关文章
- POJ 1222 EXTENDED LIGHTS OUT(翻转+二维开关问题)
POJ 1222 EXTENDED LIGHTS OUT 今天真是完美的一天,这是我在poj上的100A,留个纪念,马上就要期中考试了,可能后面几周刷题就没这么快了,不管怎样,为下一个200A奋斗, ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元解异或方程组)
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10835 Accepted: 6 ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元)
[题目链接] http://poj.org/problem?id=1222 [题目大意] 给出一个6*5的矩阵,由0和1构成,要求将其全部变成0,每个格子和周围的四个格子联动,就是说,如果一个格子变了 ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元)题解
题意:5*6的格子,你翻一个地方,那么这个地方和上下左右的格子都会翻面,要求把所有为1的格子翻成0,输出一个5*6的矩阵,把要翻的赋值1,不翻的0,每个格子只翻1次 思路:poj 1222 高斯消元详 ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元解XOR方程组)
http://poj.org/problem?id=1222 题意:现在有5*6的开关,1表示亮,0表示灭,按下一个开关后,它上下左右的灯泡会改变亮灭状态,要怎么按使得灯泡全部处于灭状态,输出方案,1 ...
- POJ 1222 EXTENDED LIGHTS OUT (高斯消元)
题目链接 题意:5*6矩阵中有30个灯,操作一个灯,周围的上下左右四个灯会发生相应变化 即由灭变亮,由亮变灭,如何操作使灯全灭? 题解:这个问题是很经典的高斯消元问题.同一个按钮最多只能被按一次,因为 ...
- Poj 1222 EXTENDED LIGHTS OUT
题目大意:给你一个5*6的格子,每个格子中有灯(亮着1,暗着0),每次你可以把一个暗的点亮(或者亮的熄灭)然后它上下左右的灯也会跟着变化.最后让你把所有的灯熄灭,问你应该改变哪些灯. 首先我们可以发现 ...
- POJ 1222 EXTENDED LIGHTS OUT(反转)
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12616 Accepted: 8 ...
- [高斯消元] POJ 2345 Central heating
Central heating Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 614 Accepted: 286 Des ...
随机推荐
- (转)持续化集成工具CruiseControl.NET
持续化集成工具CC.NET[ 引言: 团队开发需要 进行集中的项目文件管理与有效的协调,我们采用源代码管理工具协助我们管理,卓有成效.限定重要文件的访问权限.使用悲观锁杜绝成员同时编辑同一份文件. 不 ...
- Linux 小记录
<1>bzero 原型:extern void bzero(void *s, int n);用法:#include <string.h> 功能:置字节字符串s的前n个字节为零. ...
- Windows Phone 为指定容器内的元素设置样式
在Windows Phone中设置元素样式有多种 拿TextBlock来说 1.我们可以直接在控件上设置: <TextBlock Text="自身样式设置" Width=&q ...
- 6.JAVA_SE复习(集合)
集合 结构图: 总结: 1.集合中的元素都是对象(注意不是基本数据类型),基本数据类型要放入集合需要装箱. 2.set与list的主要区别在于set中不允许重复,而list(序列)中可以有重复对象. ...
- C#语言的Image和byte数组的互相转换
/// <summary> /// 字节数组转换为图片 /// </summary> /// <param name="buffer">字节数组 ...
- C# CRC32
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 使用Hibernate 拦截执行sql语句,并输出sql语句,获取sql语句
重建包名 org.hibernate.type.descriptor.sql 重建类BasicBinder 代码如下 package org.hibernate.type.descriptor.sql ...
- DIV当textarea使用,在聚焦的时候将光标移动到内容的末尾
#### DIV当textarea使用,在聚焦的时候将光标移动到内容的末尾 #### <style type="text/css"> .test_box { width ...
- Cassandra1.2文档学习(19)—— CQL索引
参考文档:http://www.datastax.com/documentation/cql/3.0/webhelp/index.html#cql/ddl/ddl_primary_index_c.ht ...
- Cassandra1.2文档学习(13)—— 数据读取
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...