ningbooj--1655--木块拼接(贪心)



[1655] 木块拼接

时间限制: 1000 ms 内存限制: 65535 K


问题描述
好奇的skyv95想要做一个正方形的木块,现在有三种颜色的矩形木块,颜色分别为"A","B","C"。他现在很想把三个木块拼接成一个大正方形,现在求助于你们,问分别给你们三种颜色矩形的两个边长,判断是否能组成一个正方形。
输入
依次输入颜色为A的矩形的两边长度,颜色为B的矩形的两边长度,颜色为C的矩形的两边长度。
输出
可以输出"YES",否则输出"NO"。
样例输入
4 4 2 6 4 2
样例输出
YES
提示
例子的图像可以是这样
6
BBBBBB
BBBBBB
AAAACC
AAAACC
AAAACC
AAAACC
来源
By&Recoder

有两种情况,一种是三个并排,另一种是一个在上,然后下边的拼接,拼接的两个必须有一条边相等,并且相等的边加上上方的长方形短边等于长边
 
  
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
	int a,b;
}p[5];
int cmp(node s1,node s2)
{
	if(s1.a==s2.a)
	return s1.b>s2.b;
	return s1.a>s2.a;
}
int main()
{
	while(cin>>p[0].a>>p[0].b>>p[1].a>>p[1].b>>p[2].a>>p[2].b)
	{
		int flag=-1;
		int maxx=-1,a=0,b=0;
		for(int i=0;i<3;i++)
		{
			if(p[i].a>maxx||p[i].b>maxx)
			{
				maxx=max(p[i].a,p[i].b);
				flag=i;
			}
		}
		bool f=false;
		int ans=0;
		for(int i=0;i<3;i++)
		{
			if(p[i].a==maxx||p[i].b==maxx)
			ans++;
			if(p[i].a<p[i].b)
			swap(p[i].a,p[i].b);
		}
		if(ans==3)
		{
			int sum=0;
			for(int i=0;i<3;i++)
			if(p[i].a==maxx)
			sum+=p[i].b;
			else
			sum+=p[i].a;
			if(sum==maxx)
			f=true;
		}
		sort(p,p+3,cmp);
		if(p[1].a==p[2].a&&p[1].a+min(p[0].a,p[0].b)==maxx)
		f=true;
		if(p[1].a==p[2].b&&p[1].a+min(p[0].a,p[0].b)==maxx)
		f=true;
		if(p[1].b==p[2].a&&p[1].b+min(p[0].a,p[0].b)==maxx)
		f=true;
		if(p[1].b==p[2].b&&p[1].b+min(p[0].a,p[0].b)==maxx)
		f=true;
		if(f)
			printf("YES\n");
		else
			printf("NO\n");
	}
	return 0;
}

转载于:https://www.cnblogs.com/playboy307/p/5273427.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值