1587 - Box

来源:互联网 发布:unity3d 引擎 编辑:程序博客网 时间:2024/06/07 18:44

这道题乍一看挺简单,总想找一些简单的方法,但是并不容易。还是用比较笨的方法吧,就是把输入的数据顺序排好,一点儿一点儿的判断。

长方形的每个面的边长(x,y),按x>=y来记录。最后12个边面排好序应该是 (a,b)(a,b)(a,c)(a,c)(b,c)(b,c)。然后判断是否满足这种形式就可以了。

12个数据应该是没有冗余的,都用得到。

#include <iostream>#include <vector>#include <algorithm>using namespace std;struct face{int x,y;face(int xx=0,int yy=0):x(xx),y(yy){}bool operator<(const face &f)const{if(x>f.x)return true;else if(x == f.x && y>=f.y)return true;else return false;}friend inline istream & operator>>(istream & is,face &f){int a,b;is>>a>>b;if(a>b){f.x=a;f.y=b;}else{f.x=b;f.y=a;};return is;}bool operator==(const face &f)const{return (x==f.x&&y==f.y);}};int main(){int a,b;vector<face> face_set(6);while(cin>>face_set[0]>>face_set[1]>>face_set[2]>>face_set[3]>>face_set[4]>>face_set[5]){sort(face_set.begin(),face_set.end());if((face_set[0]==face_set[1] && face_set[2]==face_set[3] && face_set[4] == face_set[5])&&(face_set[0].x == face_set[2].x && face_set[0].y == face_set[4].x && face_set[2].y==face_set[4].y))cout<<"POSSIBLE\n";elsecout<<"IMPOSSIBLE\n";}return 0;}


0 0