uva 1560 - Extended Lights Out(枚举 | 高斯消元)
题目链接:uva 1560 - Extended Lights Out
题目大意:给定一个5∗6的矩阵,每一个位置上有一个灯和开关,初始矩阵表示灯的亮暗情况,假设按了这个位置的开关,将会导致周围包含自己位置的灯状态变换。求一个按开关位置,保证全部灯都灭掉。
解题思路:
- 枚举,枚举第一行的状态,然后递推出后面四行的状态。
- 高斯消元,对于每一个位置对定变量,这样列出30个方程求解。
C++ 枚举#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std;
const int maxn = 10;
const int R = 5;
const int C = 6; int arr[maxn][maxn], v[maxn][maxn], p[maxn][maxn]; bool judge (int s) {
memset(p, 0, sizeof(p));
memset(v, 0, sizeof(v)); for (int i = 0; i < C; i++) {
if (s&(1<<i)) {
p[1][i+1] = 1; for (int j = 0; j <= 2; j++)
v[1][i+j] ^= 1;
v[2][i+1] ^= 1;
}
} for (int i = 2; i <= R; i++) {
for (int j = 1; j <= C; j++)
if (v[i-1][j]^arr[i-1][j]) {
p[i][j] = 1; for (int k = -1; k <= 1; k++)
v[i][j+k] ^= 1;
v[i+1][j] ^= 1;
}
} for (int i = 1; i <= C; i++)
if (v[R][i]^arr[R][i])
return false; for (int i = 1; i <= R; i++) {
for (int j = 1; j < C; j++)
printf("%d ", p[i][j]);
printf("%d\n", p[i][C]);
}
return true;
} int main () {
int cas;
scanf("%d", &cas);
for (int kcas = 1; kcas <= cas; kcas++) { for (int i = 1; i <= R; i++)
for (int j = 1; j <= C; j++)
scanf("%d", &arr[i][j]); printf("PUZZLE #%d\n", kcas);
for (int s = 0; s < (1<<C); s++)
if (judge(s))
break;
}
return 0;
}
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int dir[5][2] = {{0, 0}, {1, 0}, {-1, 0}, {0, 1}, {0, -1}};
const int maxn = 30;
const int R = 5;
const int C = 6;
typedef int Mat[maxn+5][maxn+5];
Mat A;
int v[R+5][C+5];
void init () {
memset(A, 0, sizeof(A));
memset(v, 0, sizeof(v));
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
int x = i * C + j;
scanf("%d", &A[x][maxn]);
for (int k = 0; k < 5; k++) {
int p = i + dir[k][0];
int q = j + dir[k][1];
if (p < 0 || p >= R || q < 0 || q >= C)
continue;
A[x][p*C+q] = 1;
}
}
}
}
void gauss_elimination (Mat a, int n) {
for (int i = 0; i < n; i++) {
int r = i;
while (A[r][i] == 0)
r++;
if (r != i) {
for (int j = 0; j <= n; j++)
swap(A[i][j], A[r][j]);
}
for (int j = i + 1; j < n; j++) {
if (A[j][i]) {
for (int k = 0; k <= n; k++)
A[j][k] ^= A[i][k];
}
}
}
for (int i = n - 1; i >= 0; i--) {
for (int j = i + 1; j < n; j++)
A[i][n] ^= (A[j][n] * A[i][j]);
if (A[i][n])
v[i/C][i%C] = 1;
}
}
int main () {
int cas;
scanf("%d", &cas);
for (int kcas = 1; kcas <= cas; kcas++) {
init();
gauss_elimination(A, maxn);
printf("PUZZLE #%d\n", kcas);
for (int i = 0; i < R; i++) {
printf("%d", v[i][0]);
for (int j = 1; j < C; j++)
printf(" %d", v[i][j]);
printf("\n");
}
}
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
uva 1560 - Extended Lights Out(枚举 | 高斯消元)的更多相关文章
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元解异或方程组)
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10835 Accepted: 6 ...
- 「ZOJ 1354」Extended Lights Out「高斯消元」
题意:给定一个\(5\times 6\)的棋盘的\(01\)状态,每次操作可以使它自己和周围四个格子状态取反,求如何操作,输出一个\(01\)矩阵 题解:这题可以通过枚举第一行的状态然后剩下递推来做, ...
- 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(高斯消元)
http://poj.org/problem?id=1222 竟然我理解了两天..... 首先先来了解异或方程组(或者说mod2方程组,modk的话貌似可以这样拓展出来) 对于一些我们需要求出的变量a ...
- [POJ1222]EXTENDED LIGHTS OUT(高斯消元,异或方程组)
题目链接:http://poj.org/problem?id=1222 题意:开关是四连通的,每按一个就会翻转自己以及附近的四个格(假如有).问需要翻转几个,使他们都变成关. 把每一个灯看作一个未知量 ...
- bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)
http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...
- POJ1222EXTENDED LIGHTS OUT(高斯消元)
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11815 Accepted: 7 ...
随机推荐
- 推荐他们认为有用Sublime Text3小工具
所有插件package control安装.一些国家的破解版sublime该插件是建立,安装自己的百度没有内置的方法,这里就不再重复 打开sublime.ctrl+shift+P,输入pis回车,稍等 ...
- Install shipyard
2台机器,192.168.1.153,192.168.1.154 安装Shipyard 1. 154作为集群主节点,在154机器上执行命令 curl -sSL https://shipyard-pro ...
- oracle数据库全然恢复和不全然恢复以及运行用户管理辈分恢复
比較全然恢复和不全然恢复: 一.全然恢复:将数据库恢复到当前最新状态,包含直至请求恢复时进行的全部已提交的数据更改 二.不全然恢复:将数据库恢复到请求恢复操作之前指定的过去时间点 一.全然恢复过程 以 ...
- Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介
原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理 ...
- 【ThinkingInC++】2、输入和输出流
/** *特征:输入和输出流 *时间:2014年8月8日07:37:35 *作者:cutter_point */ #include<iostream> using namespace st ...
- OpenGL模板 Mac Cmake OpenGL(Glut) Template
自己经常使用的一些功能做一个模板,有灯光效果,你可以用鼠标放大,围绕所述旋转坐标系的原点 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHlhbmcxOT ...
- [TroubleShooting] The remote copy of database xx has not been rolled forward to a point in time
Steps: 1. backup database TestMirror on Pricipal server 2. backup database log of TestMirror on Pric ...
- Jquery基础教程第二版学习记录
本文仅为个人jquery基础的学习,简单的记录以备忘. 在线手册:http://www.php100.com/manual/jquery/第一章:jquery入门基础jquery知识:jquery能做 ...
- thinkphp学习笔记2—入口文件
原文:thinkphp学习笔记2-入口文件 在thinkphp中有两个入口文件,一个是项目的入口文件,是index.php在主目录里面,还有一个是thinkphp框架的的入口文件,放在框架目录下面如: ...
- 深入理解ASP.NET MVC Day1
深入理解ASP.NET MVC ASP.NET vs MVC vs WebForms 许多ASP.NET开发人员开始接触MVC认为MVC与ASP.NET完全没有关系,是一个全新的Web开发,事实上 ...