Week10Ex:拆小块

题目描述
TT有一个A×B×C的长方体。这个长方体是由A×B×C个1×1×1的小正方体组成的。现在TT想给每个小正方体涂上颜色,需要满以下三点条件:

  • 每个小正方体要么涂成红色,要么涂成蓝色。
  • 所有红色的小正方体组成一个长方体。
  • 所有蓝色的小正方体组成一个长方体。

现在TT想知道红色小正方体的数量和蓝色小正方体的数量的差异。

你需要找到红色正方体的数量与蓝色正方体的数量差值的绝对值的最小值。
即min{|红色正方体数量 - 蓝色正方体数量|}。

输入格式
输入仅一行,三个数A B C (2≤A,B,C≤10^9)。

输出格式
输出一个数字,即差值绝对值的最小值。

输入输出案例

Simple Input 1
3 3 3
Simple Output 1
9

Simple Input 2
2 2 4
Simple Output 2
0

Simple Input 3
5 3 5
Simple Output 3
15

样例解释
在这里插入图片描述在这里插入图片描述在这里插入图片描述
解题思路
其实这道题似乎是小学的时候的一个经验之谈?

对于一个长方体,将其一刀切成两个长方体,如何使横截面积最小?答案是对着最长的那条边切下去,这样的横截面积就是两个较短边的乘积,显然是三个横截面积里最小的一个。

那么对于这道题来说,原理一模一样,不过由于需要保证小正方体的数量差更小,所以这一刀,我们要尽量从最长边的中心去切。

如果最长边长度为奇数,那最后的红蓝正方体的数量差就是横截面积;
如果最长边长度为偶数,那最后的红蓝正方体的数量差就是0。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	long long a, b, c;

	cin >> a >> b >> c;

	//Keep a>b>c
	if (a < b)
		swap(a, b);
	if (a < c)
		swap(a, c);
	if (b < c)
		swap(b, c);

	if (a % 2)//最大边为奇数
	{
		cout << b * c << endl;
	}
	else
		cout << 0 << endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值