POJ2965 The Pilots Brothers' refrigerator (精妙方法秒杀DFS BFS)
这道题和算法进阶指南的一道题解法一样,必须另操作为奇数。见证明过程
证明:要使一个为'+'的符号变为'-',必须其相应的行和列的操作数为奇数;可以证明,如果'+'位置对应的行和列上每一个位置都进行一次操作,则整个图只有这一'+'位置的符号改变,其余都不会改变.
设置一个4*4的整型数组,初值为零,用于记录每个点的操作数,那么在每个'+'上的行和列的的位置都加1,得到结果模2(因为一个点进行偶数次操作的效果和没进行操作一样,这就是楼上说的取反的原理),然后计算整型数组中一的
个数即为操作数,一的位置为要操作的位置(其他原来操作数为偶数的因为操作并不发生效果,因此不进行操作)
此上证其可以按以上步骤使数组中值都为‘-’
在上述证明中将所有的行和列的位置都加1后,在将其模2之前,对给定的数组状态,将所有的位置操作其所存的操作数个次数,举例,如果a[i][j]==n,则对(i,j)操作n次,当所有的操作完后,即全为‘-’的数组。
其实就是不模2的操作,作了许多的无用功。
以上的操作次序对结果无影响,如果存在一个最小的步骤,则此步骤一定在以上操作之中。(简单说下:因为以上操作已经包含了所有可改变欲改变位置的操作了)
而模2后的操作是去掉了所有无用功之后的操作,此操作同样包含最小步骤。
但模2后的操作去掉任何一个或几个步骤后,都不可能再得到全为‘-’的。(此同样可证明:因为操作次序无影响,先进行最小步骤,得到全为‘-’,如果还剩下m步,则在全为‘-’的数组状态下进行这m步操作后还得到一个全为
‘-’的数组状态,此只能是在同一个位置进行偶数次操作,与前文模2后矛盾,所以m=0),因此模2后的操作即为最小步骤的操作。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main() {
	char s[5][5];
	int mark[5][5];
	int x[20], y[20];
	memset(mark, 0, sizeof(mark));
	for (int i = 0; i < 4; i++) cin >> s[i];
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++) {
			if (s[i][j] == '+') {
				mark[i][j] = !mark[i][j];//下面的操作中,i,j这个位置翻转了操作了两次,等于没操作,所以上边这里再操作一次,这样让这个位置                                                           也被操作了
				for (int k = 0; k < 4; k++) {
					mark[i][k] = !mark[i][k];
					mark[k][j] = !mark[k][j];
				}
			}
		}
	}
	int ans = 0;
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++) {
			if (mark[i][j]) {
				x[ans] = i + 1;
				y[ans] = j + 1;
				ans++;
			}
		}
	}
	printf("%d\n", ans);
	for (int i = 0; i < ans; i++) printf("%d %d\n", x[i], y[i]);
	return 0;
}
												
											POJ2965 The Pilots Brothers' refrigerator (精妙方法秒杀DFS BFS)的更多相关文章
- POJ2965——The Pilots Brothers' refrigerator
		
The Pilots Brothers' refrigerator Description The game “The Pilots Brothers: following the stripy el ...
 - [POJ2965]The Pilots Brothers' refrigerator (搜索/位运算)
		
题意 游戏“The Pilots Brothers:跟随有条纹的大象”有一个玩家需要打开冰箱的任务. 冰箱门上有16个把手.每个手柄可以处于以下两种状态之一:打开或关闭.只有当所有把手都打开时,冰箱才 ...
 - poj2965 The Pilots Brothers' refrigerator —— 技巧性
		
题目链接:http://poj.org/problem?id=2965 题解:自己想到的方法是枚举搜索,结果用bfs和dfs写都超时了.网上拿别人的代码试一下只是刚好不超时的,如果自己的代码在某些方面 ...
 - poj2965 The Pilots Brothers' refrigerator
		
题目链接:http://poj.org/problem?id=2965 分析:1.这道题和之前做的poj1753题目差不多,常规思路也差不多,但是除了要输出最少步数外,还要输出路径.做这道题的时候在怎 ...
 - POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治
		
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22286 ...
 - POJ 2965 The Pilots Brothers' refrigerator 暴力 难度:1
		
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16868 ...
 - POJ 2965 The Pilots Brothers' refrigerator 位运算枚举
		
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 151 ...
 - POJ  2965  The Pilots Brothers' refrigerator (DFS)
		
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15136 ...
 - 2965 -- The Pilots Brothers' refrigerator
		
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 27893 ...
 - POJ2965The Pilots Brothers' refrigerator(枚举+DFS)
		
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22057 ...
 
随机推荐
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-34-处理https 安全问题或者非信任站点-下篇
			
1.简介 这一篇宏哥主要介绍playwright如何在IE.Chrome和Firefox三个浏览器上处理不信任证书的情况,我们知道,有些网站打开是弹窗,SSL证书不可信任,但是你可以点击高级选项,继续 ...
 - 【Javaweb】Servlet十 | HttpServletResponse类和HttpServletRequest类
			
HttpServletResponse类的作用 HttpServletResponse类和HttpServletRequest类一样.每次请求进来,Tomcat服务器都会创建一个Response对象传 ...
 - 解决IDEA加载maven工程缓慢
			
如图,哪里没有加哪里 -DarchetypeCatalog=internal
 - 【UniApp】-uni-app-扩展组件
			
前言 好,经过上个章节的介绍完毕之后,了解了一下 uni-app-内置组件 那么了解完了uni-app-内置组件之后,这篇文章来给大家介绍一下 UniApp 中的扩展组件 首先不管三七二十一,先来新建 ...
 - Java核心知识体系8:Java如何保证线程安全性
			
Java核心知识体系1:泛型机制详解 Java核心知识体系2:注解机制详解 Java核心知识体系3:异常机制详解 Java核心知识体系4:AOP原理和切面应用 Java核心知识体系5:反射机制详解 J ...
 - K8s 里如何优雅地使用 /dev/shm 实现容器间共享内存
			
目录 1. 从 docker run 的 --shm-size 参数聊起 2. Linux 里的 /dev/shm 3. Docker 对共享内存的支持 4. K8s 里如何设置 /dev/shm 大 ...
 - 组合式api-侦听器watch的语法
			
和vue2对比,也是语法上稍有不同. 监听单个数据对象 <script setup> import {ref, watch} from "vue"; const cou ...
 - ClickHouse(19)ClickHouse集成Hive表引擎详细解析
			
目录 Hive集成表引擎 创建表 使用示例 如何使用HDFS文件系统的本地缓存 查询 ORC 输入格式的Hive 表 在 Hive 中建表 在 ClickHouse 中建表 查询 Parquest 输 ...
 - 华企盾DSC控制台操作卡顿如何解决
			
解决方法: 修改注册表: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows 的 USERProcessHa ...
 - IntelliJ IDEA下载安装,以及关联gitee
			
https://www.jetbrains.com.cn/ 点击下载 IntelliJ IDEA Ultimate 旗舰版(收费) IntelliJ IDEA Community 社区版(免费) 安装 ...