uva 1587(Box UVA - 1587)
题目大意是给定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的数据里面没有这组数据所以我也没有注意这个情况
我的代码:
#include <bits/stdc++.h>
//#include "fp.h"
using namespace std;
int bk[];
int c[];
struct node
{
int x,y;
}a[];
bool cmp(node aa,node b)
{
return aa.x==b.x?aa.y>b.y:aa.x>b.x;
}
bool check(int aa)
{
if(a[aa].x==a[aa+].x&&a[aa].y==a[aa+].y)
return true;
else
return false;
}
bool recheck(int aa)
{
if(a[aa].x==a[aa+].y&&a[aa+].x==a[aa+].y&&a[aa].x!=a[aa+].x)
return false;
else
return true;
}
main()
{
//fop();
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)
{
memset(bk,,sizeof(bk));
int k=;
for(int i=;i<;i++)
{
bk[a[i].x]++;
bk[a[i].y]++;
if(bk[a[i].x]==)
c[k++]=a[i].x;
if(bk[a[i].y]==)
c[k++]=a[i].y;
}
int ff=;
for(int i=;i<k;i++)
if(bk[c[i]]%!=)
{
ff=;break;
}
for(int i=;i<;i++)
if(a[i].x<a[i].y)
{
int t;
t=a[i].x;
a[i].x=a[i].y;
a[i].y=t;
}
sort(a,a+,cmp);
int f=;
for(int i=;i<;i+=)
if(!check(i))
{
f=;
break;
}
int fff=recheck()?:;
printf("%s\n",(f&&ff&&fff)?"POSSIBLE":"IMPOSSIBLE");
}
}
uva 1587(Box UVA - 1587)的更多相关文章
- UVA 12293 - Box Game(博弈)
UVA 12293 - Box Game 题目链接 题意:两个盒子,一開始一个盒子有n个球.一个仅仅有1个球,每次把球少的盒子中球消掉,把多的拿一些球给这个盒子.最后不能操作的输(球不能少于1个),A ...
- CJOJ 2485 UVa 11991 生日礼物 / UVa 11991 Easy Problem from Rujia Liu?
CJOJ 2485 UVa 11991 生日礼物 / UVa 11991 Easy Problem from Rujia Liu? Description (原题来自刘汝佳<训练指南>Pa ...
- Box UVA - 1587
Ivan works at a factory that produces heavy machinery. He has a simple job - he knocks up wooden box ...
- UVa 1587 Box
题意:给出6个矩形的长和宽,问是否能够构成一个长方体 先假设一个例子 2 3 3 4 2 3 3 4 4 2 4 2 排序后 2 3 2 3 3 4 3 4 4 2 4 2 如果要构成一个长方体的话, ...
- 【每日一题】 UVA - 1587 Box 二维有点偏序的感觉
一开始用set存xjb分类讨论,然后wa, 然后简化了一点,改用vector,然wa 最后又发现没有初始化,然wa wa了一个半小时 最后看了题解orz 然后找了一组样例把自己的代码改对了 /* 1 ...
- 专题复习--背包问题+例题(HDU 2602 、POJ 2063、 POJ 1787、 UVA 674 、UVA 147)
*注 虽然没什么人看我的博客但我还是要认认真真写给自己看 背包问题应用场景给定 n 种物品和一个背包.物品 i 的重量是 w i ,其价值为 v i ,背包的容量为C.应该如何选择装入背包中的物品,使 ...
- 位运算基础(Uva 1590,Uva 509题解)
逻辑运算 规则 符号 与 只有1 and 1 = 1,其他均为0 & 或 只有0 or 0 = 0,其他均为1 | 非 也就是取反 ~ 异或 相异为1相同为0 ^ 同或 相同为1相异为0,c中 ...
- uva 10048 Audiophobia UVA - 10048
题目简介 一个无向正权图,求任意两个节点之间的路径里最短的路径长度. 直接Floyd解决,就是注意要把Floyd的DP式子改一下成 G[i][j]=min(G[i][j],max(G[i][k],G[ ...
- uva 227 Puzzle (UVA - 227)
感慨 这个题实在是一个大水题(虽然说是世界决赛真题),但是它给出的输入输出数据,标示着老子世界决赛真题虽然题目很水但是数据就能卡死你...一直pe pe直到今天上午AC...无比感慨...就是因为最后 ...
随机推荐
- Mongo使用
在用mongo进行查询时,$exists表示是否document是否包括这个field,即使field的value为null也算是包括. $exists Syntax: { field: { $exi ...
- 软件project—思考项目开发那些事(一)
阅读文件夹: 1.背景 2.项目管理,质量.度量.进度 3.软件开发是一种设计活动而不是建筑活动 4.高速开发(简单的系统结构与复杂的业务模型) 5.技术人员的业务理解与产品经理的业务理解的终于业务模 ...
- javascript的call和apply
coffeescript里,每个文件编译成JS后,都是(function(){...}).call(this);的架势 这个call,该怎么理解呢? 在javascript里面,call 或者 app ...
- 【树剖求LCA】树剖知识点
不太优美但是有注释的版本: #include<cstdio> #include<iostream> using namespace std; struct edge{ int ...
- Netlink通信机制【转】
本文转载自:http://www.cnblogs.com/wenqiang/p/6306727.html 一.什么是Netlink通信机制 Netlink套接字是用以实现用户进程与内核进程通信的一种 ...
- hdoj--1205--吃糖果(规律)
吃糖果 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Sub ...
- 【POJ 2054】 Color a Tree
[题目链接] http://poj.org/problem?id=2054 [算法] 贪心 [代码] #include <algorithm> #include <bitset> ...
- $(document).ready 与 window.onload的区别?
$(document).ready = function(){}; DOM树加载完成时执行,此时文件不一定都已加载完成. window.onload = function(){}; DOM树加载完成 ...
- E20171006-hm
trace vt. 跟踪,追踪; 追溯,探索; 探索; 查找; vi. 沿着一小径或道路前进; 可以追溯的; n. 痕迹; 痕迹,踪迹; 微量,极少量; [植 ...
- 9.9 NOIP模拟题
9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...