UVa1587 box(盒子)

Describe
多实例测试。给出6个矩形的长和宽,判断这6个面是不是可以围成一个长方体,若可以围成,则输出“POSSIBLE”(不包含引号),否则输出“IMPOSSIBLE”(不包含引号),每个输出占一行

Input
输入文件包含几个测试用例。它们每个由六行组成。每一行描述一个矩形,包含两个整数数字w和h (1 ≤ w,h ≤ 10000)。 宽度和高度单位都是米Output对于每个测试用例,打印一行输出。如果可以使用六个给定的矩形围成一个盒子,那么输出一个单词“POSSIBLE”。如果不可能的话,输出一个单词“IMPOSSIBLE”。
Sample Input
1345 2584
2584 683
2584 1345
683 1345
683 1345
2584 683
1234 4567
1234 4567
4567 4321
4322 4567
4321 1234
4321 1234
Sample Output
POSSIBLE
IMPOSSIBLE
 
 
解答:
         要想构成立方体,最多有三种不同长度的边。设其为A,B,C且A<B<C。为了简化处理对其进行排序:AB,AB,   AC,AC,   BC,BC。判断时只需比较:三组中A,B,C,是否相等。
 
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define x first
#define y second
pair<int,int> a[7];
int main()
{
    while (1)
    {
        for(int i=1;i<=6;i++)
        {
            if(!(cin>>a[i].x>>a[i].y)) return 0;
            if(a[i].x>a[i].y)swap(a[i].x,a[i].y);//相当于等价旋转。
        }
        sort(a+1,a+7);
        if((a[1]==a[2]&&a[3]==a[4]&&a[5]==a[6])&&a[1].x==a[3].x&&a[3].y==a[5].y&&a[5].x==a[1].y)
        {
            printf("POSSIBLE\n");
        }
        else printf("IMPOSSIBLE\n");
    }
    return 0;
}

 

posted @ 2019-07-01 09:24  satans  阅读(212)  评论(0编辑  收藏  举报