Uva 1587.Box

571

思路比较清晰吧

如果可以拼成长方体,要满足:

保证6个长方形能够成对相同(相同)
有3组不同的数据(长、宽、高),且每组有4个
使用排序进行排序。

相邻两个排序,确保每一个长方形都是以(宽,长)的顺序记录(sort排序时,开始位置是第一个位置,结束为止是最后一个数据的下一个位置)

然后整体排序,每4个一组,进行比较




#include <cstdio>
#include <algorithm>
using namespace std;

#define REP(n) for(int o=0;o<n;o++)

bool Do();

int main(){
    //freopen("in.txt","r",stdin);
    while(Do());
    return 0;
}

bool Do(){
    int a[13];
    if(scanf("%d",&a[1])==EOF)
        return false;
    REP(11)
        scanf("%d",&a[o+2]);
    REP(6)
        sort(&a[1+o*2],&a[3+o*2]);

    bool can=true;

    for(int i=0;i<6;i++){
        int cnt=0;
        for(int j=0;j<6;j++){
            if(a[1+i*2]==a[1+j*2]&&a[2+i*2]==a[2+j*2])
                cnt++;
        }
        if(cnt<2){
            can=false;
            break;
        }
    }

    if(can){
        sort(a+1,a+13);
        REP(3)
            if(!(a[1+o*4]==a[2+o*4]&&a[2+o*4]==a[3+o*4]&&a[3+o*4]==a[4+o*4]))
                can=false;
    }
    printf("%s\n",can?"POSSIBLE":"IMPOSSIBLE");
    return true;
}
发布评论
  • 点击查看/关闭被识别为广告的评论