您的位置:首页 > 其它

UVa 1587 BOX

2015-07-20 08:32 387 查看
题意是:给定六个已知长和宽的矩形,问能否作为一个长方体的六个面

很水的模拟题,首先一定有三个面和其余的三个面完全相同

之后那三个面的关系应满足1-3,2-3,1-2;

标记判断即可

代码如下:

//我的代码是王大妈的裹脚布——又臭又长。。

#include<cstdio>

#include<cstdlib>

#include<cstring>

#include<algorithm>

#include<cstring>

using namespace std;

struct mat{

int w,h;

}t[10],k[10];

bool bj[10];

int main(){

while(scanf("%d%d",&t[1].w,&t[1].h)==2){

memset(bj,0,sizeof(bj));

if(t[1].w<t[1].h)swap(t[1].w,t[1].h);

for(int i=2;i<=6;++i){

scanf("%d%d",&t[i].w,&t[i].h);

if(t[i].w<t[i].h)swap(t[i].w,t[i].h);

}int sum=0;

for(int i=1;i<=6;++i){

if(!bj[i]){

for(int j=i+1;j<=6;++j){

if(t[j].w==t[i].w&&t[j].h==t[i].h){

bj[j]=1;k[++sum]=t[i];break;

}

}

}

}

if(sum!=3)printf("IMPOSSIBLE\n");

else{

int p=0,c=0,u=0,v=0;

for(int i=2;i<=sum;++i){

if(k[1].h==k[i].w){p=i;u=0;break;}

if(k[1].h==k[i].h){p=i;u=1;break;}

}

if(p==0)printf("IMPOSSIBLE\n");

else{

for(int i=sum;i>=2;--i){

if(k[1].w==k[i].h&&p!=i){c=i;v=1;break;}

if(k[1].w==k[i].w&&p!=i){c=i;v=0;break;}

}

if(c==0)printf("IMPOSSIBLE\n");

else{int tmp=0,temp=0;

for(int i=2;i<=sum;++i){

if(c==i){

if(v==1)tmp=k[i].w;

else tmp=k[i].h;

}

if(p==i){

if(u==1)temp=k[i].w;

else temp=k[i].h;

}

}

if(tmp!=temp)printf("IMPOSSIBLE\n");

else printf("POSSIBLE\n");

}

}

}

}return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: