给定6个矩形的长和宽wi和hi(1≤wi,hi≤1000),判断它们能否构成长方体的6个面。

思路是首先排序,每个矩形都是x<y,就是短边x,长边y,然后对六个矩形进行二级排序,排序以后构成长方体的条件有两步,第一步,首先是三对相同的长和宽,排序之后是0和1,2和3,4和5,是相同的。

接下来第二步,根据0,2,4,这三对数来看,0.x必然等于2.x,0.y必然等4.x,2.y必然等于4.y;至于为什么,长方体有三种不同的边,我们记为abc,并且记a>b>c,则长方体的六个面必定是ab、ab、ac、ac、bc、bc(按照边的长度排序),符合这种形式的就是一个长方体。下面有两份代码,思路是一样的,实现方式不一样,

先看看我的代码,比较渣

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std; struct boxs
{
int x, y;
}box[]; bool cmp(boxs b1,boxs b2)
{
if (b1.x < b2.x)//一级排序
return true;
else // 二级排序
{
if (b1.x == b2.x)
{
if (b1.y < b2.y)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
bool check()
{
if ((!(box[].x==box[].x&&box[].y==box[].y)) || (!(box[].x == box[].x&&box[].y == box[].y)) || (!(box[].x == box[].x&&box[].y == box[].y)))return false;
if (box[].x != box[].x || box[].y != box[].x || box[].y != box[].y) return false;
return true;
}
int main()
{
int a, b;
while (cin>>a>>b) {
if (a > b) {
box[].x = b;
box[].y = a;
}
else {
box[].x = a;
box[].y = b;
}
for (int i = ;i < ;i++) {
cin >> a >> b;
if (a > b) {
box[i].x = b;
box[i].y = a;
}
else {
box[i].x = a;
box[i].y = b;
}
}
sort(box, box + , cmp);
cout << (check() ? "POSSIBLE" : "IMPOSSIBLE" )<< endl;
}
return ;
}

别人的代码

#include <bits/stdc++.h>
using namespace std; struct face{
int x, y;
}a[];
bool check()
{
if(memcmp(a, a+, sizeof(face)) || memcmp(a+, a+, sizeof(face)) || memcmp(a+, a+, sizeof(face))) return false;
if(a[].x!=a[].x || a[].y!= a[].x || a[].y!=a[].y) return false;
return true;
}
int main()
{
while(cin >> a[].x >> a[].y >> a[].x >> a[].y >> a[].x >> a[].y >> a[].x >> a[].y >> a[].x >> a[].y >> a[].x >> a[].y){
for(int i = ; i < ; ++i)
if(a[i].x < a[i].y)
swap(a[i].x, a[i].y);
sort(a, a+, [](const face a, const face b) {return a.x==b.x ? (a.y > b.y) : (a.x > b.x);});
printf("%s\n", check() ? "POSSIBLE" : "IMPOSSIBLE");
}
return ;
}

uva1587BOX的更多相关文章

随机推荐

  1. codeforces 446B(优先队列)

    题目链接:http://codeforces.com/problemset/problem/446/B #include<bits/stdc++.h> using namespace st ...

  2. echo、print、sprint、sprintf输出

    echo() 函数 定义和用法 echo() 函数输出一个或多个字符串. 语法 echo(strings) 参数 描述 strings 必需.一个或多个要发送到输出的字符串. 提示和注释 注释:ech ...

  3. 地图和定位 、 iCloud

    1 FindMe应用 1.1 问题 MapKit框架可以用于创建现场交互的地图来显示用户想要设备显示的任何位置,包括用户的当前位置,甚至可以进行标记并查看地图上的标注信息.CoreLocation框架 ...

  4. img标签中alt和title属性的正确使用

    在的img标签有两个属性分别为alt和title,对于很多初学者而言对这两个属性的正确使用都还抱有迷惑,当然这其中一部分原因也是ie浏览器所导致的.正确的使用这两个属性除了可以提高图片的搜索能力外,在 ...

  5. Scramble String

    Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...

  6. 理解伪元素 :before和:after

    在CSS中有一特性允许我们添加额外元素而不扰乱文档本身,就是伪元素. 下面举例说明: html: <blockquote>  blockquote只是一个块引用 </blockquo ...

  7. 解决android 启动白屏问题

    Android 启动APP时黑屏白屏的三个解决方案 http://www.cnblogs.com/liqw/p/4263418.html android:windowSoftInputMode属性使用 ...

  8. C string.h 常用函数

    参考:http://womendu.iteye.com/blog/1218155 http://blog.csdn.net/zccst/article/details/4294565 还有一些,忘记了 ...

  9. 【线性代数】 06 - Jordan标准型

    现在就来研究将空间分割为不变子空间的方法,最困难的是我们还不知道从哪里着手.你可能想到从循环子空间出发,一块一块地进行分割,但这个方案的存在性和唯一性都不能解决.不变子空间分割不仅要求每个子空间\(V ...

  10. SQL总结(五)存储过程

    SQL总结(五)存储过程 概念 存储过程(Stored Procedure):已预编译为一个可执行过程的一个或多个SQL语句. 创建存储过程语法 CREATE proc | procedure pro ...