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 }