UVA 1587 Box思考
タイトル:
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コード:
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;
}
}