uva 1587 - Box

新题,给出6个面,判断是否能够组成以个长方体。

如果是长方体的话,一个面一定存在另一个相同的面和他对应,所以可以组成3对面。

之后对这3对面的长度宽度进行讨论枚举

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXD 10
using namespace std;
struct M{
    int x;
    int y;
}array[MAXD];
bool cmp(M m,M n){
    if(m.x > n.x)
       return true;
    if(m.x < n.x)
       return false;
    if(m.y > n.y)
       return true;
    else
       return false;
}
int solve(){
    M arrayx[MAXD];
    int ok = 0;
    int m = 0;
    for(int i = 0 ; i < 6 ; i +=2){
        if(array[i].x == array[i + 1].x && array[i].y == array[i + 1].y){
            arrayx[m].x = array[i].x;
            arrayx[m].y = array[i].y;
            m++;
        }
        else{
        ok = 1;
        break;
        }
    }
    if(ok == 1) return 0;
    else{
        int a1 = arrayx[0].x , b1 = arrayx[0].y;
        int a2 = arrayx[1].x , b2 = arrayx[1].y;
        int a3 = arrayx[2].x , b3 = arrayx[2].y;
        if(a1 == a2 && b1 == a3 && b2 == b3)
          return 1;
        if(a1 == b2 && b1 == a3 && a2 == b3)
          return 1;
        if(a1 == a2 && b1 == b3 && b2 == a3)
          return 1;
        if(a1 == b2 && b1 == b3 && a2 == a3)
          return 1;
        if(a1 == a3 && b1 == a2 && b2 == b3)
          return 1;
        if(a1 == a3 && b1 == b2 && a2 == b3)
          return 1;
        if(a1 == b3 && b1 == a2 && b2 == a3)
          return 1;
        if(a1 == b3 && b1 == b2 && a2 == a3)
          return 1;
    }
    return 0;
}
int main(){
    while(scanf("%d",&array[0].x) != EOF){
        scanf("%d",&array[0].y);
        if(array[0].x > array[0].y){
              int temp = array[0].x;
              array[0].x = array[0].y;
              array[0].y = temp;
        }
        for(int i = 1 ; i < 6 ; i++){
          scanf("%d%d",&array[i].x,&array[i].y);
          if(array[i].x > array[i].y){
              int temp = array[i].x;
              array[i].x = array[i].y;
              array[i].y = temp;
           }
        }
        sort(array,array + 6,cmp);
        int ok = solve();
        if(ok)
        printf("POSSIBLE\n");
        else
        printf("IMPOSSIBLE\n");
    }
    return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值