题意,给出两条边长确认一个矩形,给出六个矩形,请问这六个矩形能不能组成一个长方体。
做法,对于一个长方体,设其边长为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;
}
}