题目链接: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 long
using 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;
}