uva 1587(Box UVA - 1587)

Posted baccano-acmer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uva 1587(Box UVA - 1587)相关的知识,希望对你有一定的参考价值。

题目大意是给定6个数对,每个数对代表一个面的长和宽,判断这6个面是否能构成一个长方体。

这种题一看很复杂,但是只要不想多了实际上这就是一个水题。。。

首先说明一下判断的思路:

  1.长方体是有三个对面的,所以先把这三个对面找出来(因为输入的长和宽是不确定的,所以先把每一组输入的两个数按照从大到小进行调整(这里建议开一个结构体数组))。调整完之后,自己写一个cmp的函数用来sort,cmp是先比较长(按照升序或者降序是无所谓的,随你)然后如果长相等那么就比较宽(按照和长一样的顺序比较)。

  2.你以为这样就完了,那么你就错了,不信你试试马上一个WA,我就是这样,其实还漏了一个条件。比如这组测试数据:         

3 3
3 3
3 2
3 2
2 2
2 2

按照第一个条件进行输出会输出POSSIBLE实际上它是IMPOSSIBLE.为什么?因为长方体的不一样长的边数一定是4的倍数,不是的话一定不行,像这一组数据,6个3 6个2一看就不对,所以我们要加上第二个条件,对每一组的输入的长和宽进行计数(这里我是开了一个bk数组,因为是1e4的数据大小所以完全可以开的出来,然后开一个计数数组记录不同的长和宽,然后直接从计数的数组进行循环比较每一个bk[jishu[i]]%4就行了)

我的代码:

 

#include <bits/stdc++.h>
//#include "fp.h"
using namespace std;
int bk[10010];
int c[20];
struct node
{
    int x,y;
}a[10];
bool cmp(node aa,node b)
{
    return aa.x==b.x?aa.y>b.y:aa.x>b.x;
}
bool check(int aa)
{
    if(a[aa].x==a[aa+1].x&&a[aa].y==a[aa+1].y)
    return true;
    else
    return false;
}
main()
{
    //fop();
    while(cin>>a[0].x>>a[0].y>>a[1].x>>a[1].y>>a[2].x>>a[2].y>>a[3].x>>a[3].y>>a[4].x>>a[4].y>>a[5].x>>a[5].y)    
    {
        memset(bk,0,sizeof(bk));
        int k=0;
        for(int i=0;i<6;i++)
        {
            bk[a[i].x]++;
            bk[a[i].y]++;
            if(bk[a[i].x]==1)
            c[k++]=a[i].x;
            if(bk[a[i].y]==1)
            c[k++]=a[i].y;
        }
        int ff=1;
        for(int i=0;i<k;i++)
        if(bk[c[i]]%4!=0)
        {
            ff=0;break;
        }
        for(int i=0;i<6;i++)
        if(a[i].x<a[i].y)
        {
            int t;
            t=a[i].x;
            a[i].x=a[i].y;
            a[i].y=t;
        }
        sort(a,a+6,cmp);
        int f=1;
        for(int i=0;i<5;i+=2)
        if(!check(i))
        {
            f=0;
            break;
        }
        printf("%s
",(f&&ff)?"POSSIBLE":"IMPOSSIBLE");
    }
} 

 







以上是关于uva 1587(Box UVA - 1587)的主要内容,如果未能解决你的问题,请参考以下文章

Uva 1587.Box

UVa 1587 Box 盒子

盒子(Box, UVa1587)

502-Box UVA - 1587

502-Box UVA - 1587

UVA1587