第一步我们发现对于每一个格子,我们只有翻和不翻两种状态,我们发现一旦确定了第一行操作,那么第二行的操作也就随之确定了,因为第一行操作之后我们要想得到答案就得把第一行全部为0,那么第二行的每一个格子的操作都会对应于其上的格子的改变,而且也只有第二行能救他了。因此我们只要知道第一行的操作其他的就全都可以推知了,于是我们就用状压枚举第一行的操作,因为这是天然字典序。

#include <cstdio>
#include <iostream>
using namespace std;
int A[],n,m,a[],full,b[],ANS[],god,Ans=0x7fffffff;
int main(){
scanf("%d%d",&m,&n);
full=(<<n)-;
for(register int i=,x;i<=m;i++){
for(register int j=;j<=n;j++)
scanf("%d",&x),a[i]|=(x<<(n-j));
}
if(n==)
{
b[]=;
}
else
{
b[]=;
for(register int i=;i<n;i++)
b[i]=(<<i)|(<<(i-))|(<<(i-));
b[n]=(<<(n-))|(<<(n-));
}
for(register int k=;k<=full;k++)
{
register int now=a[],p=k,sum=;
A[]=k;
for(register int i=;i<=n;i++)
if(k&(<<(i-)))now^=b[i],sum++;
p=now;
for(register int i=;i<=m;i++)
{
now=a[i];
A[i]=p;
for(register int j=;j<=n;j++)
if(A[i-]&(<<(j-)))now^=(<<(j-));
for(register int j=;j<=n;j++)
if(p&(<<(j-)))now^=b[j],sum++;
p=now;
}
if(!p)
{
god=;
if(sum<Ans)
{
for(register int i=;i<=m;i++)ANS[i]=A[i];
Ans=sum;
}
}
}
if(god)
{
for(int i=;i<=m;i++)
{
for(int j=n;j>;j--)
{
if(ANS[i]&(<<(j-)))
printf("1 ");
else
printf("0 ");
}
puts("");
}
return ;
}
printf("IMPOSSIBLE");
}

【BZOJ 1647】[Usaco2007 Open]Fliptile 翻格子游戏 模拟、搜索的更多相关文章

  1. BZOJ 1647 [Usaco2007 Open]Fliptile 翻格子游戏:部分枚举 位运算

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1647 题意: 在一个n*m(1 <= n,m <= 15)的棋盘上,每一个格子 ...

  2. bzoj 1647: [Usaco2007 Open]Fliptile 翻格子游戏【dfs】

    这个可以用异或高斯消元,但是我不会呀我用的暴搜 2的m次方枚举第一行的翻转情况,然后后面的就定了,因为对于一个j位置,如果i-1的j位置需要翻,那么一定要翻i的j,因为这是i-1的j最后翻的机会 按字 ...

  3. 1647: [Usaco2007 Open]Fliptile 翻格子游戏

    1647: [Usaco2007 Open]Fliptile 翻格子游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 423  Solved: 173[ ...

  4. 【BZOJ】1647: [Usaco2007 Open]Fliptile 翻格子游戏(暴力)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1647 自己太弱...看题解.. 竟然是枚举第一行的放法,,,因为一定要全部变0,所以将前一行1的在这 ...

  5. [Usaco2007 Open]Fliptile 翻格子游戏

    [Usaco2007 Open]Fliptile 翻格子游戏 题目 Farmer John knows that an intellectually satisfied cow is a happy ...

  6. [Usaco2007 Open]Fliptile 翻格子游戏题解

    问题 B: [Usaco2007 Open]Fliptile 翻格子游戏 时间限制: 5 Sec  内存限制: 128 MB 题目描述 Farmer John knows that an intell ...

  7. [Usaco2007 Open]Fliptile 翻格子游戏 状态压缩

    考试想到了状压,苦于T1废掉太长时间,于是默默输出impossible.. 我们知道,一个格子的翻转受其翻转次数和它相邻翻转次数的影响. 由每一个位置操作两次相当于把它翻过来又翻回去,所以答案中每一个 ...

  8. [Usaco2007 Open]Fliptile 翻格子游戏 状压dp

    n,m<=15,直接搞肯定不行,考虑一行一行来, 每一行的状态只与三行有关,所以从第一行开始枚举,每一次让下面一行填上他上面那行的坑 最后一行必须要同时满足他自己和他上面那行,否则舍去 #inc ...

  9. [BZOJ 1647][USACO 2007 Open] Fliptile 翻格子游戏

    1647: [Usaco2007 Open]Fliptile 翻格子游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 702  Solved: 281[ ...

随机推荐

  1. Python正则表达式-基础

    Python正则表达式-基础 本文转载自昔日暖阳,原文地址:http://www.osheep.cn/4806.html python使用正则,需要先引入re模块 import re 匹配符 单个字符 ...

  2. grep用法小结

    用法 grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] -e PATTERN ... [FILE...] grep [OPTIONS] -f FILE . ...

  3. PIC32MZ 通过USB在线升级 -- USB CDC bootloader

    了解bootloader 的实现,请加QQ: 1273623966 (验证填 bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek ...

  4. web前端/移动端H5博客专家博客大全--值得收藏的前端技术大牛博客地址

    web前端/移动端H5博客专家博客大全--值得收藏的前端技术大牛博客地址   Huang Jie Blog .Com-前端开发 http://www.huangjieblog.com/?feed=rs ...

  5. Scala学习笔记(四):从文件里读取文本行

    第一个版本: import scala.io.Source if(args.length>0){ for(line<-Source.fromFile(args(0)).getLines) ...

  6. DO NOT BELIEVE HIS LIES 游戏随笔

    这游戏是我大学的一个基友推荐的,好吧,感觉被他坑了··· 解谜游戏~慢慢来玩玩··· 恩,就是下面红色圈圈画起来的这个家伙. #1 第一关 好吧,界面上也没啥可聊的,上面写了一行字,THE FIRST ...

  7. vue之vue-cookies使用

    一.安装vue-cookies npm install --save vue-cookies 或者 yarn add vue-cookies 二.引入vue-cookie // 方式一:require ...

  8. CentOs 版本名字说明

    What images are in this directory CentOS-6.3-x86_64-netinstall.iso This is the network install and r ...

  9. kickstart技术安装操作系统

    kickstart是RedHat公司开源的软件,所以对CentOS兼容性最好. 原理:我们将手动安装的所有的详细步骤记录到一个文件中,然后kickstart通过读取这个文件就可以实现自动化安装系统. ...

  10. 学习bash——管道命令

    摘要:管道命令概述.常见管道命令的使用(cut/grep.sort/wc/uniq.tee.tr/col/join/paste/expand.xargs.减号-) 一.概述 命令执行完会在屏幕上打印相 ...