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的更多相关文章
随机推荐
- warning C4305: “=”: 从“int”到“unsigned char”截断解决方法[zz]
在控制台程序中定义: float x; x=22.333; 编译会出现 warning C4305: “初始化”: 从“double”到“float”截断 系统默认此浮点数是22.333是double ...
- Jquery EasyUI Tree .net实例
图片: 针对tree: 数据库: CREATE TABLE [dbo].[SystemModel]( [Id] [,) NOT NULL, [Name] [nvarchar]() NULL, [Fat ...
- IOS 验证码
将十六进制的字符串转化为UIImage 最近写一个项目,有验证码,但是接口返回的并不是验证码图片的URL,而是返回的字节数组16进制字符串.这样就需要把16进制字符串首先字节数组,其次再把字节数组转化 ...
- js 对象深复制,创建对象和继承
js 对象深复制,创建对象和继承.主要参考高级编程第三版,总结网上部分资料和自己的代码测试心得.每走一小步,就做一个小结. 1.对象/数组深复制 一般的=号传递的都是对象/数组的引用,如在控制台输入 ...
- React Native组件之ScrollView 和 StatusBar和TabBarIos
React Native中的组件ScrollView类似于iOS中的UIScrollView,其基本的使用方法和熟悉如下: /** * Sample React Native App * https: ...
- Grand Central Dispatch(GCD)
GCD GCD是异步执行任务的技术之一. GCD使用很简洁的记述方法,实现了极为复杂繁琐的多线程编程. dispatch_async(queue, ^{ //长时间处理 ...
- sed详细分析
[一.简单描述] sed命令类似命令行的文本编辑器,以行为单位(见注1).除非带命令i(in-place)否则源文件内容并不会被更新. [二.使用] [2.1.使用方式] 存在两种使用方式: 1. ...
- asp.net 页面的Meta元素
<meta charset="utf-8" /> <meta name="viewport" content="initial ...
- python thread 多线程
thread 模块在python3中改为_thread,网上的各种帖子都说不建议新手使用thread,好吃不好吃总得尝尝看. import _thread def print_num(): for i ...
- django 过滤器 、日期格式化参数
http://blog.csdn.net/xyp84/article/details/7945094 django1.4 html页面从数据库中读出DateTimeField字段时,显示的时间格式和数 ...