UVa 1587

来源:互联网 发布:淘宝秋冬男旅游鞋 编辑:程序博客网 时间:2024/06/05 20:53

题目链接:https://odzkskevi.qnssl.com/ed235629f3a7d3d553766f5258632816?v=1511019519


先假设长方体 a>b>c

然后,去比较一下下,请看一下代码;

My ugly code

#include <cstdio>#include <string>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>#include <map>#define ll long longusing namespace std;struct node{    int w,h;}nn[10];bool cmp(node A,node B){    if(A.w == B.w)        return A.h > B.h;    return A.w > B.w;}int main(){    /*freopen("input.txt","r",stdin);*/    while(~scanf("%d%d",&nn[0].w,&nn[0].h)){        if(nn[0].w < nn[0].h) swap(nn[0].w , nn[0].h);        /*保证w > h*/        map<int,int> mp;        mp[nn[0].w]++;        mp[nn[0].h]++;        for(int i=1;i<6;i++){            scanf("%d%d",&nn[i].w,&nn[i].h);            mp[nn[i].w]++;            mp[nn[i].h]++;            if(nn[i].w < nn[i].h) swap(nn[i].w , nn[i].h);        }        int flag=1;        map<int,int>::iterator it;        for(it=mp.begin();it!=mp.end();it++){            int tmp=it->second;            if(tmp % 2){                flag=0;                break ;            }            /*不可能存在单数,如果存在,直接就不符合,因为每条边至少出现两次*/        }        if(flag){            sort(nn,nn+6,cmp);            for(int i=0;i<6;i+=2){                    /*看是否有一样的面*/                if(nn[i].w == nn[i+1].w && nn[i].h == nn[i+1].h){                }                else{                    flag=0;                    break ;                }            }            /*看这些面连接的边大小是不是一样*/            if(nn[0].w != nn[2].w || nn[0].h != nn[4].w || nn[2].h != nn[4].h){                flag=0;            }        }        if(flag) printf("POSSIBLE\n");        else printf("IMPOSSIBLE\n");    }    return 0;}