题解:盒子(UVa 1587)
来源:互联网 发布:阴司守门人网络剧资源 编辑:程序博客网 时间:2024/06/01 07:58
- 题目链接:https://vjudge.net/problem/UVA-1587
- 解题思路:
假设有长方体:a=1 b=2 c=3 ,我们将六个面的数据进行二重排序,即先一个面上两条边从小到大排序,然后按照第一个数字从小到大排序可以得到:ab ab ac ac bc bc,为了叙述方便,分别标号为a[0]-a[5];其中的两个数据分别表示a[i].x和a[i].y;经观察不难发现,如果要满足构成盒子的条件,那么有:
①a[0].x==a[1].x==a[2].x==a[3].x&&a[4].x==a[5].x
②a[0].y==a[1].y&&a[2].y==a[3].y==a[4].y==a[5].y
③a[0].y==a[4].x //容易漏考虑,否则不能拼接成盒子(长方体) - AC截图:
- AC代码:
#include<stdio.h>#include<stdlib.h>struct node{ int x,y;}a[6];int cmp(const void* a,const void* b){ struct node* c=(struct node*)a; struct node* d=(struct node*)b; if(c->x!=d->x)return c->x-d->x;//默认递增顺序,否则反过来减法 else return c->y-d->y;} //C语言的qsort()函数的cmp部分编写,注意返回类型和类型转化void swap(int &a,int &b){ //引用 int temp; temp=a;a=b;b=temp;}int tell(){ for(int i=1;i<4;i++)if(a[i].x!=a[0].x)return 0; if(a[4].x!=a[5].x)return 0; if(a[0].y!=a[1].y)return 0; for(int i=3;i<6;i++)if(a[i].y!=a[2].y)return 0; if(a[0].y!=a[4].x)return 0;//容易漏考虑; return 1;} //判断是否能构成盒子,分别对应思路分析中的①到③int main(){ while(~scanf("%d%d",&a[0].x,&a[0].y)){ if(a[0].x>a[0].y)swap(a[0].x,a[0].y);//同一个结构体内部进行排序 for(int i=1;i<6;i++){ scanf("%d%d",&a[i].x,&a[i].y); if(a[i].x>a[i].y)swap(a[i].x,a[i].y); } qsort(a,6,sizeof(a[0]),cmp); //qsort()函数 //for(int i=0;i<6;i++)printf("%d %d |",a[i].x,a[i].y); if(tell())printf("POSSIBLE\n"); else printf("IMPOSSIBLE\n"); }}
以上代码也许还不是很好或者解释中含有错误,欢迎朋友交流和分享更优秀的代码或对错误进行指出。
0 0
- 题解:盒子(UVa 1587)
- 盒子(uva-1587)
- UVa 1587 盒子
- UVA-3.10-盒子-1587
- uva 1587 盒子
- UVa 591 Box(盒子)
- uva 1587 题解
- uva 10382题解(贪心)
- 题解:谜题(UVa 227)
- 题解:循环小数(UVa 202)
- uva 12657 移动盒子
- 盒子与小球系列题解
- uva 10905 题解(贪心水题)
- uva 4256题解(简单dp)
- 题解:周期串(UVa 455)
- 题解:DNA序列(UVa 1368)
- 题解:换低档装置(UVa 1588)
- 题解:浮点数(UVa 11809)
- You-Dont-Know-JS
- HBuilder连接夜神模拟器
- Ubutu 17.04 WiFi热点创建
- J.U.C — Collections — CopyOnWrite****
- String StringBuffer StringBuilder
- 题解:盒子(UVa 1587)
- c++学习笔记--链表类应用
- 2-SAT的一些解释 (转
- 实例代码分析cloneable的使用
- Hadoop学习之二
- Spring的IOC和AOP的理解
- poj 2771 uva12083 Guardian of Decency(二分图最大独立集)
- UML学习笔记
- UVA