UVA 1587 Box思考

1261 ワード

タイトル:
2つの辺の長さを与えて1つの矩形を確認して、6つの矩形を与えて、この6つの矩形は1つの直方体を構成することができますか?
方法:
1つの直方体について、その辺長をa,b,cとし、a
このように考えると、幅(w)と高さ(h)を含む構造体を宣言し、入力されたデータについて、後項が前項より大きい場合は、交換、並べ替え後、まず3組のような矩形があるかどうかを探ることができる.もしあるならば、このように考えて、第1のwは第3のwと同じで、第3のhは第5のhと同じで、第1のhは第5のwと同じで、このようにしてこそ、矩形を満たすことができて、さもなくば満足しません.
ACコード:
#include 
#include 
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;
	}
}