//题目大意:给定6个矩形的长和宽w,h(1<=w,h<=10000),判断它们能否构成长方体的6个面。
// UVa里的1587,uDebug全试了,都能过,结果还是Wrong Answer,想知道哪有问题,求大佬康康。
#include<stdio.h>
#include<string.h>
const int N = 10005;
int a[N][N];
int s[N];
int com(int a, int b, int c, int d)// 矩形ab与cd比较是否相同
{
if(a == c && b == d) return 1;
else if(a == d && b == c ) return 1;
else return 0;
}
int main(){
while(scanf("%d%d", &a[0][0], &a[0][1]) != EOF ){
for(int i = 1; i < 6; i++)
scanf("%d%d", &a[i][0], &a[i][1]);
int max = a[0][0], min = a[0][0];
for(int j = 0; j < 6; j++){
for(int k = 0; k < 2; k ++){
if(max < a[j][k]) max = a[j][k];
if(min > a[j][k]) min = a[j][k];
s[a[j][k]]++;
}
}
int p = 0, sum = 0, x = 0, y = 0, z = 0, t = 0;
for(int i = min; i <= max; i++){
if( s[i] && s[i] % 4 != 0) { p = 1;break; }// 边数不是4的倍数
if(s[i] && !t) { x = i; t++; }// 长
else if(s[i] && t == 1) { y = i; t++; }// 宽
else if(s[i] && t == 2){ z = i; t++; }// 高
}
if(p) { printf("IMPOSSIBLE\n");continue; }
if(!z){
if(s[x] > s[y]) z = x;
else z = y;
}// 长宽高只有两个数时
int xy = 0, xz = 0, yz = 0;
for(int i = 0; i < 6; i++){
if(com(a[i][0], a[i][1], x, y)) xy ++;// 长宽
else if(com(a[i][0], a[i][1], x, z)) xz ++; // 长高
else if(com(a[i][0], a[i][1], z, y)) yz ++;// 宽高
}
if(xy % 2 != 0 || xz % 2 != 0 || yz % 2 != 0 || xy + xz + yz != 6) printf("IMPOSSIBLE\n");// 均应是2的倍数,且之和为6
else printf("POSSIBLE\n");
memset(a, 0, sizeof(a));
memset(s, 0, sizeof(s));
}
return 0;
}
|