给定6个矩形的长和宽wi和hi(1≤wi,hi≤1000),判断它们能否构成长方体的6个面。
分析:对六个面进行排序,按照长从大到小排序,长相同,按宽排序;
接下来进行判断,长方体含有“三对”面,并且一对面中的长或宽等于另一对面中的长或宽,符合条件的即为长方体。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct Rectangle{
int x, y;
bool operator < (const Rectangle & a){
if( a.x == x) return y > a.y;
return x > a.x;
}
}a[7];
bool check(){
for(int i = 0; i < 6; i+= 2)
if(a[i].x != a[i+1].x || a[i].y != a[i+1].y ) return false;
if(a[0].x!=a[2].x || a[0].y!= a[4].x || a[2].y!=a[4].y ) return false;
return true;
}
int main(int argc, char** argv) {
while(scanf("%d%d", &a[0].x, &a[0].y) == 2){
if(a[0].x < a[0].y) swap(a[0].x, a[0].y);
for(int i = 1; i < 6; i++){
scanf("%d%d", &a[i].x, &a[i].y);
if(a[i].x < a[i].y) swap(a[i].x, a[i].y);
}
sort(a, a+6);
if( check()) printf("POSSIBLE\n");
else printf("IMPOSSIBLE\n");
}
return 0;
}