盒子(Box,ACM/ICPC NEERC 2004,UVa1587)

本文探讨了如何通过六根木条构建长方体的问题,详细介绍了算法思路和实现过程,包括数据预处理、排序和条件判断,以确定木条组合的可能性。

盒子(Box,ACM/ICPC NEERC 2004,UVa1587)

 

题目描述:

给出6个木条的长和宽,判断用这些木条能否组成长方体。能,输出POSSIBLE;否则输出IMPOSSIBLE

思路详解:

先是在输入数据的时候就先对其作出处理,保证x<y;
再是对存储在结构体中的数据排序。
如果x相同,则按照y的值从小到大排序;否则按照x的值从小到大排序。 

长方体有三个“对面”,排好序后,直接判断一下“对面”的长宽是否相等,用flag做列标记。

也就是 判断一对面中的长或宽等于另一对面中的长或宽 。box

以第一组数据为例:

1345  2584

2584  683

2584  1345

683    1345

683    1345

2584  683

排序之后:

0  683  1345

1  683  1345

2  683  2584

3  683  2584

4  1345 2584

5  1345 2584

 

代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std; 

struct mp{
	int x,y; 
} ; 
bool cmp(mp a,mp b) 
{
	if(a.x==b.x)return a.y<b.y;
	return a.x<b.x; 
} 
int main()
{
	int a,b;
	while(cin>>a>>b)
	{
		if(a>b)swap(a,b);
		mp d[7];
		d[0].x=a;d[0].y=b;
		for(int i=1;i<6;i++)
		{
			cin>>a>>b;
			if(a>b)swap(a,b);
			d[i].x=a;d[i].y=b; 
		} 
		//先是在输入数据的时候就先对其作出处理,保证x<y;
		//再是对存储在结构体中的数据排序。
		//如果x相同,则按照y的值从小到大排序;否则按照x的值从小到大排序。 
		sort(d,d+6,cmp);
		int flag=1; 
		//长方体有三个“对面”,排好序后,直接判断一下“对面”的长宽是否相等,用flag做列标记 
		for(int i=0;i<6;i+=2)
		{
			if(d[i].x!=d[i+1].x||d[i].y!=d[i+1].y) 
				flag=0; 
		} 
		if(flag==1){
			//判断一对面中的长或宽等于另一对面中的长或宽 
			if(d[0].x!=d[2].x||d[0].y!=d[4].x||d[2].y!=d[4].y)
				flag=0; 
		} 
		
		if(flag==1)cout<<"POSSIBLE\n";
		else cout<<"IMPOSSIBLE\n"; 
	} 
} 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值