UVA 1587 Box 思维

题意,给出两条边长确认一个矩形,给出六个矩形,请问这六个矩形能不能组成一个长方体。

做法,对于一个长方体,设其边长为a,b,c,令a<b<c,排序完成后,则有,ab,ab,ac,ac,bc,bc,即只有这样的数据才能构成长方体。

则可以这样考虑,声明一个结构体,含有宽(w)和高(h),对于输入的数据,若后项大于前项,则交换,排序后,首先寻找是否刚好有三组一样的矩形。如果有,则这样考虑,第一个的w与第三个的w一样,第三个的h与第五个的h一样,第一个的h与第五个的w一样,只有这样子,才满足矩形,否则不满足。

AC代码:

#include <iostream>
#include <algorithm>
using namespace std;
struct rec
{
	int w, h;
};
rec a[6];
bool cmp(const rec &a, const rec &b)
{
	return a.w == b.w ? a.h < b.h : a.w < b.w;
}
bool check()
{
	if (a[0].w != a[1].w||a[0].h != a[1].h)
		return false;
	if (a[2].w != a[3].w||a[2].h != a[3].h)
		return false;
	if (a[4].w != a[5].w||a[4].h != a[5].h)
		return false;
	if (a[0].h != a[2].h||a[0].w != a[4].h||a[2].w != a[4].w)
		return false;
	return true;
}
int main()
{
	while (cin>>a[0].w>>a[0].h)
	{
		if (a[0].w < a[0].h)
			swap(a[0].w, a[0].h);
		for (int i = 0; i < 5; ++i)
		{
			cin >> a[i + 1].w >> a[i + 1].h;
			if (a[i + 1].w < a[i + 1].h)
				swap(a[i + 1].w, a[i + 1].h);
		}
		sort(a, a + 6, cmp);
		if (!check())
			cout << "IMPOSSIBLE" << endl;
		else
			cout << "POSSIBLE" << endl;
	}
}

猜你喜欢

转载自blog.csdn.net/Aya_Uchida/article/details/88372330