Poj 3279 Fliptile(反转/开关问题)

傻白入门芯片设计,指令集架构、微架构、处理器内核(十一) 通俗理解指令集架构、微架构和处理器内核的关系 阅读详情

题意:给定一个N*M的矩形,每个点上的值为0或1,0表示该点为白色棋子,1表示该点为黑色棋子。当改变一个棋子的颜色时,会连同它上下左右四个棋子共同变色。问:最少变换几次能将所有棋子都变为黑色;若有多组最小值相等的解,输出字典序最小的那个。


思路:

对于这样的变换来说,有两点可以总结:

一、反转顺序的交换对结果没有影响;

二、对一个点进行两次反转后结果不变。

好好的矩阵说着说着要求字典序最小……于是先枚举第一行的变化情况:对于第一行,确定了字典序大小,并且当第一行确定了以后之后每一行的解可以确定:

思考从第二行开始的每一行:对某个点来说,如果它上方的点是黑色的,则它必须被反转(因为对于它上方的点,已经无法受到除了它下面的其他点的影响了,因为其他三个方向的点均已被考虑过),因此判断该点上方的点即可知道该点需不需要反转。在这个策略的前提下,第1到第n-1行都可以全部变为白色,唯一要考虑的就是最后一行第n行是不是白色。因为上方的已经调整完毕,故如果这一行无法再进行颜色改变,若有非白色,则这种方法不可行。



AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int n , m , map[20][20] , flip[20][20] , save[20][20] ;
int dir[5][2] = {0,0,-1,0,1,0,0,1,0,-1};

int get ( int x , int y ){
	int color = map[x][y] ;
	for ( int i = 0 ; i < 5 ; i ++ ){				//判断这一位的原始颜色并求出总共经过几次颜色变换 
		int xx = x + dir[i][0] , yy = y + dir[i][1] ;
		if ( xx >= 0 && xx < n && yy >= 0 && yy < m ){
			color += flip[xx][yy] ;
		}
	}
	return color&1 ;
}

int calc (){
	for ( int i = 1 ; i < n ; i ++ ){
		for ( int j = 0 ; j < m ; j ++ ){
			if ( get(i-1,j) ){
				flip[i][j] = 1 ;
			}
		}
	}
	
	for ( int i = 0 ; i < m ; i ++ ){				//判断最后一行是否满足全白 
		if ( get(n-1,i) ){
			return -1 ;
		}
	}
	
	int res = 0 ;									//统计在这种情况下经过几次反转 
	for ( int i = 0 ; i < n ; i ++ ){
		for ( int j = 0 ; j < m ; j ++ ){
			res += flip[i][j] ;
		}
	}
	
	return res ;
	
}

int main(void){
	
	scanf ("%d%d",&n,&m );
	for ( int i = 0 ; i < n ; i ++ ){
		for ( int j = 0 ; j < m ; j ++ ){
			scanf ("%d",&map[i][j] );
		}
	}
	
	int k = 1 << m ;
	int res = -1 ;
	
	for ( int i = 0 ; i < k ; i ++ ){				//模拟m列每一列的二进制 
		memset ( flip , 0 , sizeof(flip) );
		for ( int j = 0 ; j < m ; j ++ ){
			flip[0][m-j-1] = ( i >> j ) & 1 ;
		}
		int num = calc() ;
		if ( num >= 0 && ( res < 0 || res > num ) ){
			res = num ;
			for ( int p = 0 ; p < n ; p ++ ){
				for ( int q = 0 ; q < m ; q ++ ){
					save[p][q] = flip[p][q] ;
				}
			}
		}
	}
	
	if ( res < 0 ){
		printf ("IMPOSSIBLE\n");
	} else {
		for ( int p = 0 ; p < n ; p ++ ){
			for ( int q = 0 ; q < m ; q ++ ){
				printf ("%d%c",save[p][q],( q == m - 1 ) ? '\n' : ' ' );
			}
		}
	}
	
	return 0;
}


EV1527 vs HS1527:固定码芯片的STM32解码避坑指南 本文深入解析EV1527与HS1527固定码芯片的技术差异,提供基于STM32的完整解码方案与稳定性优化策略。通过硬件接口配置、状态机实现及示波器诊断,解决工业遥控、安防报警等场景中的解码难题,特别针对时序差异和干扰问题给出实用解决方案。 阅读详情

相关推荐

【Unity】Pico VR 开发实战:从环境搭建到交互实现

本文是一份详细的Unity Pico VR开发实战指南,涵盖从环境搭建到核心交互实现的全流程。详细讲解了如何集成Pico Unity Integration SDK与XR Interaction Toolkit,配置开发环境,并重点解析了手柄输入处理、射线交互以及VR UI操作三大核心模块的代码实现与优化技巧,帮助开发者快速上手Pico VR应用开发。

rice5的博客 1175

常用技巧精选.反转(开关问题) poj3276 3279 3185 1244

算法概览:例.给定一个01串,现有翻转规则:翻转某一个位置时其后面2个位置也会跟着翻转,也就是每次翻转都会翻转3个连续的位置。要将01串全部翻转为0,求最小的翻转次数 形似这类题的问题叫做翻转问题,也可以叫开关问题,对于这类题通常有以下的特点,思考一下就可以想到。**1.交换区间得反转顺序队结果没有影响。 2.此外可以知道对于同一个区间进行两次以上得反转是多余的。 3.由此,反转问题(也叫开关

笔记 2477

SAP CO模块实战:成本中心会计分割结构配置全流程(OKES事务码详解)

本文详细解析了SAP CO模块中成本中心会计分割结构的配置全流程,重点讲解了OKES事务码的实战操作。内容涵盖分割结构的概念理解、配置前的次级成本要素与作业类型主数据准备,并通过步骤拆解演示了如何定义分割结构、规则与版本,以及如何将配置关联到成本中心并执行分割。最后提供了常见问题排查与优化建议,旨在帮助顾问及财务人员掌握成本精确分摊的关键配置,确保期末成本核算的准确性。

embedding5hiker的博客 805

翻转问题(开关,开灯问题)求解技巧

翻转问题技巧详解 例.给定一个01串,现有翻转规则:翻转某一个位置时其后面2个位置也会跟着翻转,也就是每次翻转都会翻转3个连续的位置。要将01串全部翻转为0,求最小的翻转次数 形似这类题的问题叫做翻转问题,也可以叫开关问题,对于这类题通常都会用到下面我要说的方法来解 ①.若某一个位置被翻转了n次,则其实际上被翻转了n%2次,因为翻转2k次相当与没翻转,翻转2k+1次相当于翻转了1次,

越努力越幸运—liupu 7401

RaiDrive+AList保姆级教程:5分钟搞定OneDrive/百度网盘挂载到本地(附WebDAV配置)

本文提供RaiDrive+AList的保姆级教程,5分钟内实现将OneDrive/百度网盘挂载到本地的详细步骤,包括WebDAV配置。通过AList统一转换云存储协议,RaiDrive虚拟磁盘挂载,显著提升多网盘管理效率,适合需要跨平台操作文件的用户。

weixin_28331555的博客 456

保姆级教程:在通达信V7.611上配置欧奈尔RPS曲线(附完整公式与每日更新流程)

本文提供通达信V7.611配置欧奈尔RPS曲线的保姆级教程,涵盖从环境准备、基础设置到核心公式配置的全流程。详细讲解如何创建股票池、编写EXTRS基础公式及RPS显示公式,并附每日更新流程与实战应用技巧,帮助投资者精准捕捉强势股。

weixin_30000735的博客 462

POJ3279(经典开关问题)

解题思路:如果枚举每一个格子的开关,复杂度为O(2^MN),这会超时。但观察规律可知,只要第一行的开关状态确定,后面的状态也都确定了。由此枚举第一行的开关状态即可。这样复杂度变为O(MN2^N)。 #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;iostream&gt; #define inf 0x3f3f3f3f usin...

qq_39861441的博客 389

TwinCAT 3 实战指南:从系统配置到高级运动控制

本文详细介绍了TwinCAT 3工业自动化控制平台的实战应用,从系统配置、PLC编程到EtherCAT总线配置和高级运动控制。通过倍福(Beckhoff)的TwinCAT 3平台,工程师可以高效实现复杂的工业自动化任务,包括运动控制、PLC编程等。文章还提供了常见问题排查和性能优化技巧,帮助用户提升系统稳定性和实时性。

weixin_30831529的博客 304

(待)反转开关问题

1、一维 题目 #include <cstdio> #include <cstring> const int SZ = 5007; int dir[SZ]; bool f[SZ]; int calc(int k, int n) { memset(f, false, sizeof f); int ans = 0, sum = 0; ...

weixin_44270812的博客 250

uniapp串口通信实战:从零搭建物联网设备控制App(附完整代码)

本文详细介绍了如何使用Uniapp实现串口通信,从零搭建物联网设备控制App。内容涵盖环境配置、串口初始化、数据收发、错误处理等核心功能,并提供了完整的代码示例,帮助开发者快速掌握跨平台串口通信技术,适用于智能农业、工业自动化等物联网场景。

weixin_30369041的博客 597

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

yohnyang的博客 209

POJ3279

做过很多遍的二进制搜索,每次写就是对着代码敲一遍,然后下次写又不会 链接:http://poj.org/problem?id=3279 题意:n*m的矩阵,全是0和1构成的,当选择翻一个点的时候,周围的点会受到影响,问选择翻n*m矩阵中的哪些点,可以将所有点均翻过来? 为什么要用搜索?因为n和m很小,最大是15 为什么要用二进制搜索?因为是枚举状态,而且是每行每列的状态

ACdream 3204

POJ-3279-Fliptile(反转/开关问题,二维)

转载于:https://www.cnblogs.com/GrowingJlx/p/6642749.html

abcd12341abcd1234的博客 186

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【回炉重造】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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

poj3279 Fliptile(反转(开关问题))

题目链接:点击打开链接 题意描述:给定一个m*n的格子,每个格子要么为黑,要么为白,我们可以通过反转格子使颜色变为相反的颜色,反转x,y时,顺便会把相邻的四个格子的颜色改变,问最少需要反转多少次能使所有格子变为白色,并输出反转情况? 解题思路:典型的反转(开关问题) 分析:枚举第一行的所有情况,对于第一行已经确定后,第二行···也就随之确定了 代码: #include

Crazy_Bear 742

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

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

Sakura_jc的博客 267

【POJ 3279 --- Fliptile】全排列+搜索

【POJ 3279 --- Fliptile】全排列+搜索 题目来源:点击进入【POJ 3279 — Fliptile】 Description Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He has arranged a brainy activit...

来日浅谈的博客 415

(枚举+状压)POJ3279Fliptile

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

Z7784562的博客 240

POJ3279_Fliptile_反转问题-2

Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10116   Accepted: 3748 Description Farmer John knows that an intellectually satisfied cow is a hap

弱的奋斗之旅 431

POJ - 3279 Fliptile(反转)

题意:一个01矩阵,每翻转一个格子,这个格子的上下左右的格子都会被翻转,要把整个矩阵的格子都翻转为0,求需要翻转的最小次数,最小次数的解为多个时,输出字典序最小的一组。解不存在输出IMPOSSIBLE。 思路:如果暴力搜索的话有种翻转的方法,超时。如果第一行是否翻转已经确定,那么第二行是否翻转也确定了,同理除了最后一行其余所有的格子是否翻转都已确定了,如果最后一行有1的话就说明不存在可行解。所以...

GYH0730的博客 808

【POJ-3279】Fliptile(二进制枚举+DFS)

【POJ-3279】Fliptile 题目要求 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 × N grid (1 ≤ M ≤ 15; 1 ≤ N ≤ 15) of square tiles, e

屋檐听雨丶 258

(POJ 3279) Fliptile 反转(开关问题)

POJ-3279-Fliptile Time Limit:2000MS Memory Limit:65536KB Description Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He has arranged

STILLxjy 789

POJ 3279 Fliptile 【棋盘翻转问题】【状态压缩】

Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16922   Accepted: 6194 Description Farmer John knows that an intellectually satisfied cow is a happy cow who wil...

Emiya丶的博客 1075

poj3279 Fliptile

原题链接:poj3279 Fliptile 题意:可以看作一个M*N的棋盘,棋盘中布满黑白色的棋子,黑色翻转后是白色,白色反转是黑色,每步操作翻转一个棋子,并且其上下左右也都跟着翻转。 求:尽可能少的步数把所有的棋子翻成白色,最小步数有多个时,输出字典序最小的一组,无解时输出IMPOSSIBLE 输入:M N  棋子颜色(0代表白色,1代表黑色) 输出:每个棋子对应的最小步数 #in

anchorite 1265
上一篇: cf Educational Codeforces Round 32
下一篇: cf div2 #449 C.Nephren gives a riddle
Stupid_Turtle
博客等级 码龄9年 25粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值