UVa 1587 Box

判断所给的六组木板的长宽能不能组成长方体

组成长方体一定是两两相等,长宽高固定,且三组各为长宽,长高,宽高。依次为依据解题。

附AC代码:

 1 #include<iostream>
 2 #include<set>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<algorithm>
 6 using namespace std;
 7 
 8 struct face{
 9     int x,y;
10 }a[6];
11 
12 int cmp(face a,face b){
13     if(a.x==b.x)
14     return a.y<b.y;
15     return a.x<b.x;
16 }
17 
18 int main(){
19     while(cin>>a[0].x>>a[0].y>>a[1].x>>a[1].y>>a[2].x>>a[2].y>>a[3].x>>a[3].y>>a[4].x>>a[4].y>>a[5].x>>a[5].y){
20         set<int> temp;
21         for(int i=0;i<6;i++){
22             if(a[i].x>a[i].y)
23             swap(a[i].x,a[i].y);
24             temp.insert(a[i].x);
25             temp.insert(a[i].y);
26         }
27         if(temp.size()>3){//剔除掉数字数目大于3的情况 
28             cout<<"IMPOSSIBLE"<<endl;
29             continue;
30         }
31         else{
32             sort(a,a+6,cmp);
33             if(memcmp(a,a+1,sizeof(face))||memcmp(a+2,a+3,sizeof(face))||memcmp(a+4,a+5,sizeof(face))){//判断是否两两相等 
34                 cout<<"IMPOSSIBLE"<<endl;
35                 continue;
36             }
37             if(a[0].x!=a[2].x||a[0].y!=a[4].x||a[2].y!=a[4].y){//判断是否只有一套长宽高 
38                 cout<<"IMPOSSIBLE"<<endl;
39                 continue;
40             }
41             cout<<"POSSIBLE"<<endl;
42         }
43     }
44     return 0;
45 }