Box

 

 

给定6个矩形的长和宽wi和hi(i<=wi,hi<=1000),判断它们能否构成从长方体的六个面

 

需要了解pair,用pair来储存长和宽,同时需要知道,用sort给pair的数组排序时,会先按照第一个值从大到小排列,再考虑第二个值从大到小排列

 

思路:

将六个矩形储存在pair的数组中,将他们排序,排序后,第一个pair中的最小值,等于第二个第三个第四个的最小值,第一个pair的最大值等于第二个的最大值和第五个第六个的最小值,第三个pair的最大值等于第四个第五个第六个的最大值。因为长方体中假设长宽高都不同,那么按照刚刚的排序方法,必然最小的边是前四个pair的最小值,后两个是长宽高中第二大的值,继续按照如上排序,前四个中pair的第二个值排序,所以前两个是第二大值,剩下的地方为长宽高中最大的值

例如:

6 13
6 13
6 25
6 25
13 25
13 25

代码如下:

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

int main(void)
{
    while (1)
    {
        pair<int, int> p[6];
        for (int i = 0; i < 6; i++)
        {
            if (cin >> p[i].first >> p[i].second)
            {
                if (p[i].first > p[i].second)
                {
                    swap(p[i].first, p[i].second);
                }
            }
            else
                return 0;
        }
        sort(p, p + 6);
        puts(p[0].first == p[1].first && p[0].first == p[2].first && p[0].first == p[3].first &&
            p[0].second == p[1].second && p[0].second == p[4].first && p[0].second == p[5].first &&
            p[2].second == p[3].second && p[2].second == p[4].second && p[2].second == p[5].second ? "POSSIBLE" : "IMPOSSIBLE");
        
    }
    return 0;



}

 

posted @ 2021-01-26 15:41  loliconsk  阅读(321)  评论(0)    收藏  举报