uva1587BOX
给定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的更多相关文章
随机推荐
- wireshark使用方法(学习笔记一)
wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必须了解网络协议,否则就看不懂wireshark了. 为了安全考虑 ...
- 团队开发——冲刺1.b
冲刺阶段一(第二天) 1.昨天做了什么? 在了解C#的基础上,深入熟悉Windows窗体应用程序,熟练掌握基本功能 2.今天准备做什么? 在C#的Windows窗体应用程序中,设计简单的游戏开始主界面 ...
- 在Mac OSX 10.10 上安装opencv
http://blog.csdn.net/wdkirchhoff/article/details/41910553 在Mac OSX上如果想使用OpenCV,可以通过自己手动编译源码的方式,但比较繁琐 ...
- Android Sudoku应用挂掉的问题
在真机上测试数独游戏时发现,快速点击屏幕时,游戏偶尔出现挂死的情况,Log如下 04-08 15:35:00.838 7317-7356/org.elvalad.sudoku D/OpenGLRend ...
- 金浪网关ESR-6400G 告警解决办法
防火墙中提示为每秒新建连接数大于设定范围,自动断开改IP两分钟 解决办法:更换MAC地址与IP地址 下图是防火墙设置
- Ubuntu 14.04下安装Hadoop2.4.0 (单机模式)
转自 http://www.linuxidc.com/Linux/2015-01/112370.htm 一.在Ubuntu下创建Hadoop组和hadoop用户 增加hadoop用户组,同时在该组里增 ...
- Jena TDB 101 Java API without Assembler
Update on 2015/05/12 ongoing tutorials site on https://github.com/zhoujiagen/semanticWebTutorialUsin ...
- for循环相关
循环语句是指令式编程的常见语句,Scala对其加以改进,成为适应函数式风格的利器. for循环中的变量,没有val或者var,是因为变量的类型,完全是集合中的元素的类型.作用域持续到括号结束. 在sc ...
- POJ 3067 Japan(树状数组)
Japan Time Limit: 10 ...
- 【ASP.net】Equals 和 == 的区别
在比较Equals 和 ==的区别前.我们先来了解下相关的知识 C#数据类型 1.值类型 值类型有: 值类型包括:简单类型.结构类型.枚举类型:引用类型包括:Object 类型.类类型.接口.代表元. ...