程序设计思维与实践 Week10 模拟赛 A 签到题

题目描述

TT有一个A×B×C的长方体。这个长方体是由A×B×C个1×1×1的小正方体组成的。

现在TT想给每个小正方体涂上颜色。

需要满以下三点条件:

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

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

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

input:

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

output:

输出一个数字。

即差值绝对值的最小值。

思路:

根据题意:将一个大的长方体,分成两个小的长方体,尽量的使得两个小长方体的差小一些就好。

如果描述大长方体的三个量abc中有一个是偶数,则ans==0.否则按照“中间”位置将大长方体分开即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long ans=-1,a,b,c;
long long tmp1,tmp2,tmp3;
int main()
{
	cin>>a>>b>>c;
	if(a%2==1)
	{
		tmp1=(a/2)*b*c;
		tmp2=((a/2)+1)*b*c;
		ans=abs(tmp1-tmp2);
	}
	else ans=0;
	if(b%2==1)
	{
		tmp1=(b/2)*a*c;
		tmp2=((b/2)+1)*a*c;
		ans=min(ans,abs(tmp1-tmp2));
	}
	else ans=0;
	if(c%2==1)
	{
		tmp1=(c/2)*b*a;
		tmp2=((c/2)+1)*b*a;
		ans=min(ans,abs(tmp1-tmp2));
	}
	else ans=0;
	cout<<ans;
	return 0;
}

 

Guess you like

Origin blog.csdn.net/cax1165/article/details/105797193