UVA-1587 Box(判断6个矩形能不能构成一个长方体)

Vjudge题目链接,水题,判断6个矩形能不能构成一个长方体。

构成长方体:平行面的矩形相同;长宽高至多是三个不同的数

判矩形是否两两完全相同简单,判12个数是否最多3个不同用set

#include
#include
#include
#include
#include
using namespace std;

struct rect{
    int w, h;
};

bool cmp(rect a, rect b){
    if(a.w == b.w)return a.h < b.h;
    else return a.w < b.w;
}

int main(){
    int w, h;
    rect r[6];
    int cnt = 0;
    bool flag = true;
    while(~scanf("%d %d", & w, &h)){
        r[cnt].w = min(w, h);
        r[cnt].h = max(w, h);
        cnt++;
        if(cnt == 6){
            set<int> s;
            cnt = 0;
            sort(r, r+6, cmp);
            //for(int i = 0; i < 6; i++)printf("%d %d\n", r[i].w, r[i].h);
            //必要条件:三对一模一样的矩形
            if(r[0].w != r[1].w || r[0].h != r[1].h)flag = false;
            if(r[2].w != r[3].w || r[2].h != r[3].h)flag = false;
            if(r[4].w != r[5].w || r[4].h != r[5].h)flag = false;
            for(int i = 0; i < 6; i++){
                s.insert(r[i].w);
                s.insert(r[i].h);
            }
            if(s.size()>3)flag = false;//长宽高至多只有3个不同的数
            if(flag)printf("POSSIBLE\n");
            else printf("IMPOSSIBLE\n");
            flag = true;
        }
    }
    return 0;
}

你可能感兴趣的:(题解,#,水题)