POJ – 2965 – The Pilots Brothers' refrigerator (高效贪心!!)[通俗易懂]

POJ – 2965 – The Pilots Brothers' refrigerator (高效贪心!!)

大家好,又见面了,我是全栈君。

The Pilots Brothers’ refrigerator
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 19356   Accepted: 7412   Special Judge

Description

The game “The Pilots Brothers: following the stripy elephant” has a quest where a player needs to open a refrigerator.

There are 16 handles on the refrigerator door. Every handle can be in one of two states: open or closed. The refrigerator is open only when all handles are open. The handles are represented as a matrix 4х4. You can change the state of a handle in any location [i, j] (1 ≤ i, j ≤ 4). However, this also changes states of all handles in row i and all handles in column j.

The task is to determine the minimum number of handle switching necessary to open the refrigerator.

Input

The input contains four lines. Each of the four lines contains four characters describing the initial state of appropriate handles. A symbol “+” means that the handle is in closed state, whereas the symbol “−” means “open”. At least one of the handles is initially closed.

Output

The first line of the input contains N – the minimum number of switching. The rest N lines describe switching sequence. Each of the lines contains a row number and a column number of the matrix separated by one or more spaces. If there are several solutions, you may give any one of them.

Sample Input

-+--
----
----
-+--

Sample Output

6
1 1
1 3
1 4
4 1
4 3
4 4

Source

Northeastern Europe 2004, Western Subregion

看着ACM练习建议去做的,,上面说的是枚举。。

可是我枚举了半天。。没搞出来


网上搜了下别人的题解,都是说有高效贪心算法。然后琢磨半天搞懂了


比方:

-+–

—-

—-

—-

要把这个改成全是减号就必须将+号所在行和所在列的符号所有都改变一次(+号所在位置改变一次就可以)

所以有例如以下改变次数:

4744

2422

2422

2422

当中7是+号位置所需改变的次数,4是+号所在行和所在列(不包含+号)所需改变次数

因此得出高效解法,在每次输入碰到’+’的时候, 计算所在行和列的须要改变的次数

当输入结束后,遍历数组,全部为奇数的位置则是操作的位置,而奇数位置的个数之和则是终于的操作次数.

但这样的算法仅仅对n为偶数时适用

PS:该题不会有”Impossible”的情况.


AC代码:


#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int a[5][5];

int main()
{
	char c;
	memset(a, 0, sizeof(a));
	for(int i=1; i<=4; i++)
		for(int j=1; j<=4; j++)
		{
			c = getchar();
			while(c == '\n') c = getchar();
			if(c == '+')
			{
				for(int k=1; k<=4; k++)
				{
					a[i][k]++;
					a[k][j]++;
				}
				a[i][j]--;
			}
		}
	int sum = 0;
	for(int i=1; i<=4; i++)
		for(int j=1; j<=4; j++)
			sum += a[i][j]%2;
	printf("%d\n", sum);
	for(int i=1; i<=4; i++)
		for(int j=1; j<=4; j++)
			if(a[i][j]%2)
				printf("%d %d\n", i, j);
	return 0;
} 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115438.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月4日 下午2:00
下一篇 2022年2月4日 下午3:00


相关推荐

  • IOS 语法 – 关于 NStimer 中 scheduledTimerWithTimeInterval方法传参的问题「建议收藏」

    IOS 语法 – 关于 NStimer 中 scheduledTimerWithTimeInterval方法传参的问题「建议收藏」使用NSTimerscheduledTimerWithTimeInterval:target:selector:userInfo:repeats:的时候有两个地方需要注意。首先select

    2022年7月1日
    69
  • 送你一张图,教你如何docker卸载redis,请收好「建议收藏」

    送你一张图,教你如何docker卸载redis,请收好「建议收藏」一张图,告诉你怎么操作。嘿嘿❤如果文章对您有所帮助,就在文章的右上角或者文章的末尾点个赞吧!(づ ̄3 ̄)づ❤如果喜欢大白兔分享的文章,就给大白兔点个关注吧!(๑′ᴗ‵๑)づ╭❤~❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复讨论(请勿发表攻击言)…

    2025年10月2日
    4
  • 较好的Mac激活成功教程软件下载地址「建议收藏」

    较好的Mac激活成功教程软件下载地址「建议收藏」史蒂芬周的博客

    2022年10月10日
    3
  • 先验概率和后验概率理解

    先验概率和后验概率理解对于统计学只是皮毛认识 在学校时根本不重视 如今机器学习几乎以统计学为基础发展起来的 头疼的紧 如今还得琢磨基础概念 1 我自己的理解 1 先验 统计历史上的经验而知当下发生的概率 2 后验 当下由因及果的概率 2 网上有个例子说的透彻 1 先验 根据若干年的统计 经验 或者气候 常识 某地方下雨的概率 2 似然 下雨 果 的时候有乌云 因 证据 观察的数据 的概率

    2026年3月19日
    2
  • rsyslog日志服务器_journal entries

    rsyslog日志服务器_journal entriesrsyslogd服务和journald服务1、系统日志管理后台程序(通常被称为守护进程或服务进程)处理了linux系统的大部分任务,日志是记录这些进程的详细信息和错误信息的文件var/log/messages    ##记录系统中所产生的日志查看sshd服务产生的日志vim/etc/ssh/sshd_config编辑错误信息restart服务后systemctl…

    2022年8月15日
    6
  • 中标麒麟V6系统安装达梦数据库V7

    中标麒麟V6系统安装达梦数据库V7中标麒麟 V6 系统安装达梦数据库 V71 规划用户 组 安装目录 root localhost groupadddins root localhost useradd gdinstalldmd root localhost passwddmdba root localhost mkdir dm72 修改目录权限 root local

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号