Box UVA - 1587 盒子

 题目链接

给定6个矩形的长和宽wi和hi(1≤wi,hi≤1000),判断它们能否构成长方体的6个面。

分析:对六个面进行排序,按照长从大到小排序,长相同,按宽排序;

接下来进行判断,长方体含有“三对”面,并且一对面中的长或宽等于另一对面中的长或宽,符合条件的即为长方体。

 

#include 
#include 
#include 
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;
}

 

你可能感兴趣的:(数学,算法竞赛入门经典(第二版))