习题3-10 盒子(Box, ACM/ICPC NEERC 2004, UVa1587)

来源:互联网 发布:mac怎么查看下一张图片 编辑:程序博客网 时间:2024/06/03 19:30

题目数据虽然小,但要是强行写一下

先把6条边排序,分成3组,再判长宽高三者两两相等

#include <iostream>#include <string>#include <cstring>#include <algorithm>#define mem(x) memset(x,0,sizeof(x))using namespace std;typedef pair<int,int> pii;pii A[10];int mi(const pii &x){    return min(x.first,x.second);}int ma(const pii &x){    return max(x.first,x.second);}bool cmp(const pii &a,const pii &b){    if(ma(a)==ma(b))        return mi(a)<mi(b);    else return ma(a)<ma(b);}bool eql(const pii &a,const pii &b){    if(ma(a)==ma(b))        return mi(a)==mi(b);    else return false;}int main(){    int a,b;    while(cin>>a>>b)    {        A[0].first = a;        A[0].second = b;        for(int i=1;i<6;i++)        {            cin>>A[i].first>>A[i].second;        }        sort(A,A+6,cmp);        //for(int i=0;i<6;i++)cout<<A[i].first<<' '<<A[i].second<<endl;cout<<endl;        int fg=1;        for(int i=0;i<3;i++)        {            if(!eql(A[2*i],A[2*i+1]))            {                fg=0;                break;            }        }        if(fg&&(mi(A[0])==mi(A[2])&&(ma(A[0])==mi(A[4]))&&(ma(A[2])==ma(A[4]))))            cout<<"POSSIBLE"<<endl;        else            cout<<"IMPOSSIBLE"<<endl;    }    return 0;}