acm第五次训练-box

box-acm

//这题我是转载的,思想很不错   原文出处如下

http://blog.csdn.net/u011497948/article/details/48735993


//我自己的理解


#include<cstdio>  
#include<algorithm>  
using namespace std;
const int C = 10001;
int p[7];
void swap(int &x, int &y)
{
    int t = x;
x = y;
y = t;
}
int x, y;
int main()
{
    while (scanf("%d%d", &x, &y) == 2)
    {
        if (x>y)swap(x, y);
            p[0] = x*C + y;
            for (int i = 1; i <= 5; i++)
            {
                scanf("%d%d", &x, &y);
                if (x>y)swap(x, y);
                p[i] = x*C + y;
            }
        sort(p, p + 6);    
        bool f = false;
        if (p[0] == p[1] && p[2] == p[3] && p[4] == p[5])
        {
            if (p[0] / C == p[2] / C)
            {
                if ((p[0] % C == p[4] / C&&p[2] % C == p[4] % C) || (p[0] % C == p[4] % C&&p[2] % C == p[4] / C))
                {
                    printf("POSSIBLE\n");
                    f = true;
                }
            }

        }
        if (!f)printf("IMPOSSIBLE\n");
    }
    return 0;
}



//但是我觉得原作者的代码还可以进行改进

 if ((p[0] % C == p[4] / C&&p[2] % C == p[4] % C) || (p[0] % C == p[4] % C&&p[2] % C == p[4] / C))

可以改成  if ((p[0] % C == p[4] / C&&p[2] % C == p[4] % C) )

  解释

若构成立方体长宽高的三个值可能为    a   b    c

  不妨假设 a<=b<=c

则进行完sort函数之后排序p中携带的数据排序一定为

a b   (p[0],p[1])

a c    (p[2],p[3])

b c    (p[4],p[5])

则此时只需要检验三组对应的值是否相等即可(我认为位置已经 绝对确定)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值