POJ - 1222 / POJ - 3279 枚举第一行
说好的高斯消元法呢,暴搜都能0ms
这种翻转就是枚举第一行控制变量下面行就全都确定了
代码参考挑战程序设计例题
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define rep(i,j,k) for(int i=j;i<=k;i++)
using namespace std;
const int maxn = 1e2+11;
const int dx[]={-1,0,0,0,1};
const int dy[]={0,-1,0,1,0};
int G[maxn][maxn],best[maxn][maxn],tmp[maxn][maxn];
int r,c;
int check(int x,int y){
int t=G[x][y];
rep(i,0,4){
int tx=x+dx[i],ty=y+dy[i];
if(tx>=1&&tx<=r&&ty>=1&&ty<=c){
t+=tmp[tx][ty];
}
}
return t%2;
}
int cal(){
rep(i,2,r) rep(j,1,c){
if(check(i-1,j)==1){
tmp[i][j]=1;
}
}
rep(i,1,c) if(check(r,i)==1) return -1;
int cnt=0;
rep(i,1,r) rep(j,1,c) cnt+=tmp[i][j];
return cnt;
}
void print(){
rep(i,1,r){
rep(j,1,c){
if(j==c) printf("%d\n",best[i][j]);
else printf("%d ",best[i][j]);
}
}
}
int main(){
r=5,c=6;
int T,kase=0; scanf("%d",&T);
while(T--){
rep(i,1,r) rep(j,1,c) scanf("%d",&G[i][j]);
int ans=-1;
rep(i,0,(1<<c)-1){
memset(tmp,0,sizeof tmp);
rep(j,1,c) tmp[1][j]=i>>(j-1)&1;//最低位判断
int cnt=cal();
if(cnt>=0&&(cnt<ans||ans<0)){
memcpy(best,tmp,sizeof tmp);
ans=cnt;
}
}
printf("PUZZLE #%d\n",++kase);
if(~ans) print();
else printf("IMPOSSIBLE\n");
}
return 0;
}
POJ - 1222 / POJ - 3279 枚举第一行的更多相关文章
- POJ 1222 POJ 1830 POJ 1681 POJ 1753 POJ 3185 高斯消元求解一类开关问题
http://poj.org/problem?id=1222 http://poj.org/problem?id=1830 http://poj.org/problem?id=1681 http:// ...
- POJ - 3279 枚举 [kuangbin带你飞]专题一
这题很经典啊,以前也遇到过类似的题--计蒜客 硬币翻转. 不过这题不仅要求翻转次数最少,且翻转方案的字典序也要最小. 解法:二进制枚举第一行的翻转方案,然后处理第二行,如果第二行的k列的上一列是黑色, ...
- [poj]开关类问题 枚举 位运算
poj 1222 EXTENDED LIGHTS OUT 开关只有两种方案 按和不按,按两次相当于关 只用枚举第一排开关的按法即可,剩下的行为使上一排的灯全部关闭,按法可以确定,并且是唯一的. 最后 ...
- Poj 1222 EXTENDED LIGHTS OUT
题目大意:给你一个5*6的格子,每个格子中有灯(亮着1,暗着0),每次你可以把一个暗的点亮(或者亮的熄灭)然后它上下左右的灯也会跟着变化.最后让你把所有的灯熄灭,问你应该改变哪些灯. 首先我们可以发现 ...
- POJ 1222 EXTENDED LIGHTS OUT(翻转+二维开关问题)
POJ 1222 EXTENDED LIGHTS OUT 今天真是完美的一天,这是我在poj上的100A,留个纪念,马上就要期中考试了,可能后面几周刷题就没这么快了,不管怎样,为下一个200A奋斗, ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元)题解
题意:5*6的格子,你翻一个地方,那么这个地方和上下左右的格子都会翻面,要求把所有为1的格子翻成0,输出一个5*6的矩阵,把要翻的赋值1,不翻的0,每个格子只翻1次 思路:poj 1222 高斯消元详 ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元解异或方程组)
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10835 Accepted: 6 ...
- POJ 1496 POJ 1850 组合计数
Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8256 Accepted: 3906 Description Tran ...
- POJ 1222【异或高斯消元|二进制状态枚举】
题目链接:[http://poj.org/problem?id=1222] 题意:Light Out,给出一个5 * 6的0,1矩阵,0表示灯熄灭,反之为灯亮.输出一种方案,使得所有的等都被熄灭. 题 ...
随机推荐
- vmware 安装不成功导致的问题解决以及右键菜单添加打开终端命令
转自http://blog.csdn.net/puweilan/article/details/8609952 在VMware安装Ubuntu完成后,一直停留在VMware Easy Install, ...
- java中的监听事件
java监听器实现的类 1.ServletContextListener:对servlet上下文的创建和销毁监听 2.ServletContextAttributeListener:监听servlet ...
- fiddler抓包时显示Tunnel to......443
打开手机浏览器,输入http://192.168.0.65:8888/FiddlerRoot.cer
- readfile()
readfile()将一个文件写入到输出缓存参数1:文件名
- HTTP请求:POST和GET的差异
1,一般情况下应用目的不同:GET是从服务器上获取数据,POST是向服务器传送数据. 2,将数据提交到服务器的方式不同:GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各 ...
- OSG3.2+Qt5.2.1+VS2012+OSGEarth 2.5编译问题记录
问题1:CMake Error at D:/Qt/Qt5.2.1/5.2.1/msvc2012_64_opengl/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake: ...
- web开发四个作用域
web开发一共有四个作用域,范围从高到低分为appliaction作用域(全局作用域),session作用域,request作用域和page作用域.${base}是el表达式语法,它会自动先从page ...
- MongoDB整理笔记の导入导出
一.导入 1.导入json数据 我们先将表user删除掉,以便演示效果: > db.user.drop(); true > show collections; system.indexes ...
- XE下 SVG格式的图标使用方法
下载一个SVG格式的图标,千图网,http://tool.58pic.com/tubiaobao/ 用txt文本打开SVG图标 拖一个PathLabel控件 在PathLabel控件的Data属性添加 ...
- HTML5移动Web开发实战 PDF扫描版
<HTML5移动Web开发实战>提供了应对这一挑战的解决方案.通过阅读本书,你将了解如何有效地利用最新的HTML5的那些针对移动网站的功能,横跨多个移动平台.全书共分10章,从移动Web. ...