紫书习题3-10 盒子(Box, ACM/ICPC NEERC 2004, UVa1587)

该博客介绍了如何解决UVa1587问题,即根据6个矩形的尺寸判断是否能构成长方体的六个面。通过分析长方体的边数和边的平等性,提出了三种可能的合法情况:三边不等且每边各出现4次,两边相等时一边出现4次另一边出现8次,三边相等时所有边出现12次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

紫书习题3-10 盒子(Box, ACM/ICPC NEERC 2004, UVa1587)
题目:给定6个矩形的长和宽wi和 hi(1≤wi,hi≤1000),判断它们能否构成长方体 的6个面。
思路:找准切除点,即如何判断长方体是否合法:面数(输入边数)- 对应平行的边应相等 - 具体合法长方体的情况归纳整理。
因此,参考博客中归纳到,长方体共有12条边,分别为长a、宽b、高c,均出现4次,这是最普通的长方体,还要考虑长宽高互相相等的情况,总之判断边出现的次数是否满足以下三种情况即可
(1)a≠b≠c 12条边中等价于三个数,均出现四次
(2)a,b,c中存在两者相等 比如a=b≠c 12条边等价于两个数,分别出现4次、8次
(2)a=b=c 三边相等,12条边相当于一个数出现12次
满足任一种情况即可,构成长方体

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int c[12],a=0,b=0;
    for(int i=0;i<12;i++)
    {
        cin>>c[i];
    }
    for(int i=0;i<12;i++)
    {
        if(c[0]==c[i]) a++;
        if(c[1]==c[i]) b++;
    }
    if((a==4&&b==4) || (a==4&&b==8) ||  (a==8&&b==4) || (a==8&&b==8) || (a==12&&b==12))
        cout<<"Y";
    else cout<<"N";
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值