【BZOJ】1647: [Usaco2007 Open]Fliptile 翻格子游戏(暴力)
http://www.lydsy.com/JudgeOnline/problem.php?id=1647
自己太弱。。。看题解。。
竟然是枚举第一行的放法,,,因为一定要全部变0,所以将前一行1的在这一行翻转掉就好了。。。因为是一定要翻掉前一行,所以正确性显然。。。。。。。。。。。。
T_T
表示智商不够
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << #x << " = " << x << endl
#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; } const int N=20, dx[]={-1, 1, 0, 0}, dy[]={0, 0, -1, 1};
int c[N][N], ans[N][N], n, m, tot, mn=~0u>>1;
bool a[N][N], b[N][N]; void rot(int x, int y) {
b[x][y]=!b[x][y]; ++c[x][y];
rep(i, 4) {
int fx=dx[i]+x, fy=dy[i]+y;
if(fx<1 || fy<1 || fx>n || fy>m) continue;
b[fx][fy]=!b[fx][fy];
}
}
void getans(int x) {
CC(c, 0); tot=0;
for1(i, 1, n) for1(j, 1, m) b[i][j]=a[i][j];
for1(i, 0, m-1) if((1<<i)&x) { rot(1, i+1); ++tot; if(tot>=mn) return; }
for1(i, 2, n) for1(j, 1, m) if(b[i-1][j]) { rot(i, j); ++tot; if(tot>=mn) return; }
for1(i, 1, n) for1(j, 1, m) if(b[i][j]) return;
mn=tot;
for1(i, 1, n) for1(j, 1, m) ans[i][j]=c[i][j];
} int main() {
read(n); read(m);
for1(i, 1, n) for1(j, 1, m) read(a[i][j]);
int end=(1<<m)-1;
for1(i, 0, end) getans(i);
if(mn!=~0u>>1) for1(i, 1, n) { printf("%d", ans[i][1]); for1(j, 2, m) printf(" %d", ans[i][j]); puts(""); }
else puts("IMPOSSIBLE");
return 0;
}
Description
Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He has arranged a brainy activity for cows in which they manipulate an M x N grid (1 <= M <= 15; 1 <= N <= 15) of square tiles, each of which is colored black on one side and white on the other side. As one would guess, when a single white tile is flipped, it changes to black; when a single black tile is flipped, it changes to white. The cows are rewarded when they flip the tiles so that each tile has the white side face up. However, the cows have rather large hooves and when they try to flip a certain tile, they also flip all the adjacent tiles (tiles that share a full edge with the flipped tile). Since the flips are tiring, the cows want to minimize the number of flips they have to make. Help the cows determine the minimum number of flips required, and the locations to flip to achieve that minimum. If there are multiple ways to achieve the task with the minimum amount of flips, return the one with the least lexicographical ordering in the output when considered as a string. If the task is impossible, print one line with the word "IMPOSSIBLE".
Input
* Line 1: Two space-separated integers: M and N
* Lines 2..M+1: Line i+1 describes the colors (left to right) of row i of the grid with N space-separated integers which are 1 for black and 0 for white
Output
* Lines 1..M: Each line contains N space-separated integers, each specifying how many times to flip that particular location.
Sample Input
1 0 0 1
0 1 1 0
0 1 1 0
1 0 0 1
Sample Output
1 0 0 1
1 0 0 1
0 0 0 0
OUTPUT DETAILS:
After flipping at row 2 column 1, the board will look like:
0 0 0 1
1 0 1 0
1 1 1 0
1 0 0 1
After flipping at row 2 column 4, the board will look like:
0 0 0 0
1 0 0 1
1 1 1 1
1 0 0 1
After flipping at row 3 column 1, the board will look like:
0 0 0 0
0 0 0 1
0 0 1 1
0 0 0 1
After flipping at row 3 column 4, the board will look like:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Another solution might be:
0 1 1 0
0 0 0 0
0 0 0 0
0 1 1 0
but this solution is lexicographically higher than the solution above.
HINT
Source
【BZOJ】1647: [Usaco2007 Open]Fliptile 翻格子游戏(暴力)的更多相关文章
- BZOJ 1647 [Usaco2007 Open]Fliptile 翻格子游戏:部分枚举 位运算
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1647 题意: 在一个n*m(1 <= n,m <= 15)的棋盘上,每一个格子 ...
- bzoj 1647: [Usaco2007 Open]Fliptile 翻格子游戏【dfs】
这个可以用异或高斯消元,但是我不会呀我用的暴搜 2的m次方枚举第一行的翻转情况,然后后面的就定了,因为对于一个j位置,如果i-1的j位置需要翻,那么一定要翻i的j,因为这是i-1的j最后翻的机会 按字 ...
- 1647: [Usaco2007 Open]Fliptile 翻格子游戏
1647: [Usaco2007 Open]Fliptile 翻格子游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 423 Solved: 173[ ...
- [Usaco2007 Open]Fliptile 翻格子游戏
[Usaco2007 Open]Fliptile 翻格子游戏 题目 Farmer John knows that an intellectually satisfied cow is a happy ...
- [Usaco2007 Open]Fliptile 翻格子游戏题解
问题 B: [Usaco2007 Open]Fliptile 翻格子游戏 时间限制: 5 Sec 内存限制: 128 MB 题目描述 Farmer John knows that an intell ...
- 【BZOJ 1647】[Usaco2007 Open]Fliptile 翻格子游戏 模拟、搜索
第一步我们发现对于每一个格子,我们只有翻和不翻两种状态,我们发现一旦确定了第一行操作,那么第二行的操作也就随之确定了,因为第一行操作之后我们要想得到答案就得把第一行全部为0,那么第二行的每一个格子的操 ...
- [Usaco2007 Open]Fliptile 翻格子游戏 状态压缩
考试想到了状压,苦于T1废掉太长时间,于是默默输出impossible.. 我们知道,一个格子的翻转受其翻转次数和它相邻翻转次数的影响. 由每一个位置操作两次相当于把它翻过来又翻回去,所以答案中每一个 ...
- [Usaco2007 Open]Fliptile 翻格子游戏 状压dp
n,m<=15,直接搞肯定不行,考虑一行一行来, 每一行的状态只与三行有关,所以从第一行开始枚举,每一次让下面一行填上他上面那行的坑 最后一行必须要同时满足他自己和他上面那行,否则舍去 #inc ...
- [BZOJ 1647][USACO 2007 Open] Fliptile 翻格子游戏
1647: [Usaco2007 Open]Fliptile 翻格子游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 702 Solved: 281[ ...
随机推荐
- 说说PHP中的命名空间相关概念
说说PHP中的命名空间相关概念 1. PHP中的命名空间是什么? 什么是命名空间?"从广义上来说,命名空间是一种封装事物的方法.在非常多地方都能够见到这样的抽象概念. 比如.在操作系统中文件 ...
- TP框架中session操作
TP中session操作 查看代码,OMG! 不应该是这样的
- 〖Android〗/system/etc/media_codecs.xml
其中的原文件中包含的注释如下: <?xml version="1.0" encoding="utf-8" ?> <!-- Copyright ...
- javascript 的继承实例
shape.prototype = { getEdge:function(){ return this.edge; }, getArea:function(){ return this.a*this. ...
- SpringMVC与SiteMesh
SpringMVC与SiteMesh2.4无缝整合并借助JSR303规范实现表单验证 SiteMesh3.0的下载,简介与使用 总结: springmvc结合sitemesh总共分三步: 1.添加si ...
- dom与jquery互相转换
/*取得<input>标签中的value属性的内容[dom对象->jquery对象] var inputElement = document.getElementById(" ...
- pandas如何去掉时间列的小时只保留日期
最近无聊,想玩玩数据挖掘,就拿天池的天池新人实战赛之[离线赛]练练手.https://tianchi.aliyun.com/getStart/information.htm?spm=5176.1000 ...
- Android 添加新的Activity
1.右键, New一个Class ,文件名如:ParaSetActivity.java 注: Superclass要选择android.app.Activity ,没有直接写入android.app. ...
- linux学习知识
一.用户,用户组 http://os.51cto.com/art/201003/187533.htm http://www.cnblogs.com/zhoug2020/archive/2012/02/ ...
- 又是一年WWDC,暨回想去年之旅——Part III
前言 无论这篇写到哪里,就以这篇作为结尾,结束这个流水回想系列文了. Computer History Museum 计算机历史博物馆(站点)是在Google旁边,參观Google之前的行程. 记得那 ...