poj3279 Fliptile 好题

VS Code配合Prettier自动格式化代码 每次修改 .prettierrc.cjs 配置文件后,如果发现保存代码时格式化没有生效,可能是 VS Code 插件缓存未及时刷新。建议此时重启 VS Code,确保新的配置被正确加载并生效。 阅读详情

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 anM ×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 andN
Lines 2.. M+1: Line i+1 describes the colors (left to right) of row i of the grid withN 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
4 4
1 0 0 1
0 1 1 0
0 1 1 0
1 0 0 1
Sample Output
0 0 0 0
1 0 0 1
1 0 0 1
0 0 0 0


题意:有一个m*n的矩阵,每个各自有个瓦片,每个瓦片有两个颜色,白色和黑色。翻动一次瓦片,会同时翻转周围四个瓦片。现在希望用最少的次数把所有的瓦片变成白色(1 = 黑色, 0 = 白色)。 若有多个解,输出字典序最小的。


分析: 只要第一排的状态确定,就可以知道是否能全部翻成白色。所以我们先枚举第一排所有的状态。一共有2^m种情况。

需要注意的是二维数组的初始化。 还有字典序的问题,即我们应从第一排的最后一个数开始枚举。


代码:

#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<queue>
#include<iomanip>
using namespace std;
const int INF = 0x3f3f3f3f;
const int NINF = 0xc0c0c0c0;

bool maze[20][20];	//记录初始的情况
int res[20][20];	//最后的答案
bool temp[20][20];	//maze的复制品,用于处理每次第一排不同的情况
int ans[20][20];	//中间保存的答案
int m,n;
int cnt = 0;		//记录翻转的次数
int maxn = INF;
void turn (int i, int j)		//翻转
{
    if(i!=0)
        temp[i-1][j] = !temp[i-1][j];
    temp[i][j] = !temp[i][j];
    if(i!=m-1) temp[i+1][j] = !temp[i+1][j];
    if(j!=0) temp[i][j-1] = !temp[i][j-1];
    if(j!=n-1) temp[i][j+1] = !temp[i][j+1];
    return;
}
bool  check()		//对于确定好的第一排,检查是否能全部翻转成为白色。
{
    for(int i=1;i<m;i++){
        for(int j=0;j<n;j++){
            if(temp[i-1][j] == 1){
                turn(i,j);
                ans[i][j]++;
                cnt++;
            }
        }
    }
    int flag = 0;
    for(int i=0;i<n;i++){
        if(temp[m-1][i] == 1){
            flag = 1;
            break;
        }
    }
    if(flag){
       return 0;
    }
    else return 1;
}
int main()
{
    while(cin >> m >> n){
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                cin >> maze[i][j];
            }
        }
        int a = 0>>0; 
        for(int i=0;i< (1<<n);i++){
            cnt = 0;
            memcpy(temp,maze,sizeof(maze[0][0])*20*20);
            memset(ans,0,sizeof(ans[0][0])*20*20);
            for(int j=0;j<n;j++){
                if((i>>j) & 1){		//字典序。 例如i=3,即00011 ,1代表要翻转,0代表不翻转。这是从最后一个瓦片开始翻转。
                    turn(0,n-j-1);
                    ans[0][n-j-1]++;
                    cnt++;
                }
            }
            bool ok = check();
            if(ok && cnt < maxn){
                maxn = cnt;
                memcpy(res,ans,sizeof(ans[0][0])*20*20);
            }
        }
        if(maxn == INF){
            cout << "IMPOSSIBLE" << endl;
        }
        else{
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    cout << res[i][j] << ' ';
                }
                cout << '\n';
            }
        }
    }
}

related game : http://s1.4399.com:8080/4399swf/upload_swf/ftp/20080527/1.swf

MTK-Android12开机应用自启需求-自定义原生Launcher3 主界面布局图标 MTK平台 Android12 版本 上实现 开机应用自启需求-自定义原生Launcher3 主界面布局图标。添加一个属性定义即可,如下:这里自定义一个属性目的是为了在加载Launcher3启动时候从属性获取需要自启动应用的包名,可以扩展动态替换 自启动包名。这里有两种方案,要么在Launcher3里面实现,要么在系统服务里面在开机时候启动第三方一次。这里强烈建议在Launcher3中去实现,体验效果更好。// 第一步:定义属性,// 第二步:在onCreate 方法中获取属性并启动应用。 阅读详情

相关推荐

WPF MVVM实战:构建可绑定的RichTextBox富文本编辑器

本文详细介绍了如何在WPF MVVM模式下构建可绑定的RichTextBox富文本编辑器,解决标准RichTextBox.Document属性不支持数据绑定的问题。通过创建自定义BindableRichTextBox控件,实现FlowDocument的绑定支持,并分享插入图片、文本格式控制等实战技巧,帮助开发者高效开发富文本编辑功能。

weixin_33717117的博客 305

Fliptile 题解(状态压缩+枚举)

题目链接 题目大意 给你m行n列的黑白棋,问你最少翻多少次才能才能把棋子全变白,如果次数相同的情况则输出字典序最小的情况,如果不可以 则输出IMPOSSIBLE。而且每翻一次就会翻动自己周围的棋子。 题目思路 首先看到题目的范围很小,最多15*15,但是如果暴力枚举显然会炸。而且看到这么小的范围肯定要思考状态压缩。我们其实可以 一行一行考虑。先用枚举第一行的所有情况 。然后从第二行开始考虑,如果上...

hunxuewangzi的博客 552

SECS/GSM 测试工具 SecsExpress 的配置与实战应用

本文详细介绍了半导体设备通讯测试工具SecsExpress的配置与实战应用。作为专业的SECS/GSM协议调试工具,它能模拟Host与设备端进行双向测试,帮助工程师快速部署、验证通讯链路,并高效排查与RMS系统或真实设备间的联调问题,是提升半导体工厂设备集成与维护效率的利器。

yhn456789的博客 298

POJ 3279 Fliptile 二进制

Fliptile Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %lld & %llu SubmitStatusDescription Farmer John knows that an intellectually satisfied cow is a happy cow who will give

Katapeltes 481

eNSP-交换机VLAN配置

VLAN

乌托托的博客 8804

手把手教你用CEFSharp打造防关联指纹浏览器(附完整代码)

本文详细介绍了如何基于CEFSharp框架,从零开始构建一个企业级的防关联指纹浏览器。通过剖析核心架构、多进程隔离实现、动态指纹混淆(如Canvas、WebGL)的实战代码,以及代理集成与性能优化,为跨境电商、广告投放等场景提供了一套可控、安全的开源解决方案。

fern8的博客 961

【POJ - 3279】Fliptile 【反转特性+状压遍历字典序】

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 × N grid (1 ≤ M ≤ 15; 1 ≤ N ≤ 15...

lzs_lazy 305

【仿真】Carla Python API实战:从零搭建自动驾驶测试环境

本文详细介绍了如何使用Carla Python API从零搭建自动驾驶测试环境。通过Carla仿真平台,开发者可以构建高度逼真的城市环境和车辆物理模型,利用Python API实现传感器配置、数据采集、场景构建及自动驾驶算法集成。文章还分享了实际项目中的调试技巧和性能优化经验,帮助读者快速掌握自动驾驶仿真测试的核心技术。

weixin_29050513的博客 213

反转法--poj3279

Language: Default Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2732   Accepted: 1052 Description Farmer John knows that an intellectually s

龙崎的专栏 2153

Flutter 完整学习文档 - 从入门到精通

Widget 就像乐高积木,Flutter 中所有的东西都是 Widget。一个按钮是 Widget,一段文字是 Widget,甚至布局、边距、对齐方式也是 Widget!"万物皆 Widget"

zwjapple的专栏 2314

【YOLOv8科研级优化】基于YOLOv9的GELAN模块重构C2f架构,显著提升模型精度与推理效率

打开确保模型解析器能识别GELANBlock模块。通过将YOLOv9的GELAN模块集成到YOLOv8的C2f模块中,我们实现了一个“强特征表达+高效计算”的目标检测模型。这个改进不仅在工程上能提升复杂场景下的检测效果,更在科研上提供了“多分支特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的改进中,帮你在论文中打造独特的研究点。

FJN110的博客 111

[kuangbin带你飞]专题一 简单搜索 D - Fliptile(搜索+贪心)

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 × N grid (1 ≤ M ≤ 15; 1 ≤...

237

eCognition易康操作教程(二):多尺度分割基于多光谱数据构建规则集,结合DSM高程数据提取建筑物、树木和绿地

一、数据 数据来源:教程中的实验数据,共包含RGB三个波段,还有数字地表模型(以下简称DSM)文件。 图一 RGB影像 数据特征:数据范围较小,要素种类少,仅包含较多的建筑和大片的绿地。由于建筑的房顶使用的材料和材料颜色不同,所以建筑的光谱特征没有规律,是不连续的特征。而绿地的光谱特征则十分容易分辨。 但是建筑通常具有规则的形状,而且建筑相比于周围其他要素...

蒹葭苍苍 8302

POJ-3279-Fliptile【状态压缩】【DFS】【好题】

POJ-3279-Fliptile

Linoy 3658

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

kuangbing题单(1)简单搜索POJ 3279 Fliptile

先附上题目链接 一道搜索题,但有转弯的地方. 如果考虑搜索全局的话,在题目给的最大规模情况下时间是不可承受的(2的225次方).所以应进行分析. 因为在每一行进行翻转之后.它的最终状态只取决于它的下一行翻转的情况.比如第一行在进行翻转之后的状态是1 0 0 1.那么要使最后全部变为0,第二行就必须翻转第一个格子和第四个格子,如此只要这样进行下去.判断全部翻转完毕后最后一行是否是全为0即可. 如此一...

weixin_45590210的博客 235

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

POJ-3279 Fliptile (二进制枚举)详细题解

题目传送门:POJ-3279 Fliptile 大致题意: 有个N*M的矩阵,每个坐标点不是1就是0,我们需要通过翻转坐标点让这个矩阵全部为0,(翻转某一个点的话,这个点包括这个点的上下左右都会翻转);我们要尽可能使翻转次数更少,并且有多解时输出最小的那个解(就是指最后那个解转化为字符串的话也尽可能小) 思路: 先分析第一行,能够使第一行改变的只有本行和下一行,而我们需要将所有点都变为0,我们改变第二行时,第一行也会随之改变,所以我们要做的就是改变第二行的同时将第一行全部变为0,而第二行就交给第三行处理…

白蝶的博客 366

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

渣渣如我的ACM刨坑之路-001:Fliptile --POJ3279

Fliptile --POJ3279POJ3279:FliptileDescriptionInputOutputSample InputSample Output中文大意:功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数...

Sakura_jc的博客 267

《数据结构与算法:状态压缩》

问题 ACM-ICPC 2017 南宁赛区网络预赛 MFrequent Subsets Problem【状态压缩+暴力】 ACM-ICPC 2018 南京赛区网络预赛__EAC Challenge【状态压缩+DP】 POJ3279 Fliptile【状态压缩+DFS】 ...

逐梦者 268

(枚举+状压)POJ3279Fliptile

POJ3279Fliptile 题意&思路: 有一个m*n的01矩阵,每次选一个格子会翻转这个格子和他的上下左右。问是否能将所有的格子变成0,能就输出翻转次数最小的方案(有多个即输出字典序最小的),0表示不反转,1表示翻转。如果没有输出“IMPOSSIBLE"。 这是kuangbin的搜索题单里的一道题,之前一直没有思路。看了其他人的题解,其实就是枚举状态,然后可以发现如果(i-1,j)点...

Z7784562的博客 240

POJ3279 Fliptile

POJ3279 Fliptile (一个需要小技巧的爆搜题) 思路:通过观察可以发现,当我们确定了第一行各个位置翻或不翻后,在处理第二行时,第二行每个位置翻或不翻应该是固定的,因为若想使第一行全变白,有且仅有第二行可以做到。以此类推,除第一行外,其余每行翻或不翻都是确定的。我们仅需暴力枚举第一行每个位置是否翻,然后处理其余每行。 需要注意的是:在我们处理完m-1行后,需扫一遍最后一行是否已全变为白色,若是,则可用于更新答案。 题目还要求该答案的字典序最小,我们可发现一种方案只与第一行有关,所以在dfs枚举第

m0_50647144的博客 165

POJ 3279(Fliptile)题解

【题意】 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑色所需翻转的是哪些棋子。 【题目分析】 这题刚开始被放到搜索的分类下了..然而这和搜索有什么关系..没经验所以想了各种和搜索沾边的方法,结果没想出解法,直到看了网上的题解,压根不是搜索。 具体解法:首先根据题目,每次操作都会影响到周围

在思索中前行! 1055

【回炉重造】POJ-3279.Fliptile 题解

【回炉重造】POJ-3279.Fliptile 题解 我好弱,记录一个想了两天也想不到的暴力 题目链接:POJ-3279.Fliptile 明白题意只想看看代码的同学建议直接跳到这里:正常代码 题目 题意 解题思路 代码分块解析 主函数 after_flip() 函数 - 返回上一行的翻转结果 end_line_all_zero() 函数 - 返回最后一行是否全0 变量很长的代码 正常代码 题目 题意 给你一个0、1组成的表,翻转一个方块,可以把它本身和上下左右5个方块都从0变1、从1变0 要求

qq_37504214的博客 703

POJ 3279 Fliptile【状态压缩+DFS】

POJ 3279 Fliptile 【状态压缩+DFS】 题目大意: 有一个 M * N 的格子,每个格子可以翻转正反面,它们有一面是黑色,另一面是白色。黑色翻转之后变成白色,白色翻转之后则变成黑色。 任务就是把所有的格子翻转为白色。不过每次翻转一个格子,与它上下左右相邻接的格子也会被翻转。 若存在解,输出最小的翻转次数时,每个格子的翻转次数。有多个解时,输出字典序最小的一组;否认输出IMPOSS...

指弹键盘哼民谣 1103

POJ 3279 Fliptile

POJ 3279 Fliptile POJ入口:http://poj.org/problem?id=3279 参考网站:https://blog.youkuaiyun.com/qq_28300479/article/details/51882675 题目大意 待写 解题思路 待写 AC代码 #include <iostream> #include <cstdio> #include &...

恒治学 151

POJ - 3279 Fliptile

** POJ 3279 Fliptile ** Language: Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25673 Accepted: 9093 Description Farmer John knows that an intellectually satisfied cow ...

weixin_45539557的博客 256

poj_3279 Fliptile

题目链接:poj_3279 Fliptile 题目大意: 01矩阵,改变其中一个,周围上下左右都改变(0->1 ,1->0),目的是让这个矩阵全都变为0 求解改变次数最小的那个,如果最小次数有多种情况,输出字典序列最小的情况 解题思路: 从第一行开始枚举,直到最后一行 如果最后一行不全为0,那么就无解 代码如下: 状态压缩 + DFS #include<iostream> #include<cstring> #include<queue> usin

chstor's blog 173
上一篇: hdu4282 A very hard mathematic problem
下一篇: poj 1426 Find The Multiple
mwhybmj
博客等级 码龄10年 8粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值