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

 

上一篇:[BZOJ]4567: [Scoi2016]背单词


下一篇:PPT技巧