zoukankan      html  css  js  c++  java
  • uva 1587(Box UVA

    题目大意是给定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就行了)

    2018/10/28 居然有人看我的题解并且hack了,是的我原来的程序对于这组样例

    1 1

    1 1

    2 2

    2 2

    3 3

    3 3

    是不对的,hack成功!!!

    至于更改我直接加了一个recheck函数进行recheck一下如果两个对面是正方形且边长又不相等,那么肯定是impossible,之前的uva的数据里面没有这组数据所以我也没有注意这个情况

    我的代码:

     1 #include <bits/stdc++.h>
     2 //#include "fp.h"
     3 using namespace std;
     4 int bk[10010];
     5 int c[20];
     6 struct node
     7 {
     8     int x,y;
     9 }a[10];
    10 bool cmp(node aa,node b)
    11 {
    12     return aa.x==b.x?aa.y>b.y:aa.x>b.x;
    13 }
    14 bool check(int aa)
    15 {
    16     if(a[aa].x==a[aa+1].x&&a[aa].y==a[aa+1].y)
    17     return true;
    18     else
    19     return false;
    20 }
    21 bool recheck(int aa)
    22 {
    23     if(a[aa].x==a[aa+1].y&&a[aa+2].x==a[aa+3].y&&a[aa].x!=a[aa+2].x)
    24     return false;
    25     else
    26     return true;
    27 }
    28 main()
    29 {
    30     //fop();
    31     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)    
    32     {
    33         memset(bk,0,sizeof(bk));
    34         int k=0;
    35         for(int i=0;i<6;i++)
    36         {
    37             bk[a[i].x]++;
    38             bk[a[i].y]++;
    39             if(bk[a[i].x]==1)
    40             c[k++]=a[i].x;
    41             if(bk[a[i].y]==1)
    42             c[k++]=a[i].y;
    43         }
    44         int ff=1;
    45         for(int i=0;i<k;i++)
    46         if(bk[c[i]]%4!=0)
    47         {
    48             ff=0;break;
    49         }
    50         for(int i=0;i<6;i++)
    51         if(a[i].x<a[i].y)
    52         {
    53             int t;
    54             t=a[i].x;
    55             a[i].x=a[i].y;
    56             a[i].y=t;
    57         }
    58         sort(a,a+6,cmp);
    59         int f=1;
    60         for(int i=0;i<5;i+=2)
    61         if(!check(i))
    62         {
    63             f=0;
    64             break;
    65         }
    66         int fff=recheck(0)?1:0;
    67         printf("%s
    ",(f&&ff&&fff)?"POSSIBLE":"IMPOSSIBLE");
    68     }
    69 }

      

      

  • 相关阅读:
    CentOS安装按进程实时统计流量情况工具NetHogs笔记
    修改centos地址连接为自动连接
    优秀博客主推荐链接
    idea制动补全返回值变量快捷键
    mongodb系列之--分片的原理与配置
    Mongodb系列之--mongodb的启动与关闭
    mongodb系列之---副本集配置与说明
    mongodb系列之--mongodb 主从配置与说明
    go 语言学习
    php模拟post与get请求
  • 原文地址:https://www.cnblogs.com/baccano-acmer/p/9741159.html
Copyright © 2011-2022 走看看