NBUT 木块拼接 1655 (模拟)

木块拼接
Time Limit: 1MS   Memory Limit: 65535KB   64bit IO Format:

Status

Description

好奇的skyv95想要做一个正方形的木块,现在有三种颜色的矩形木块,颜色分别为"A","B","C"。他现在很想把三个木块拼接成一个大正方形,现在求助于你们,问分别给你们三种颜色矩形的两个边长,判断是否能组成一个正方形。

Input

依次输入颜色为A的矩形的两边长度,颜色为B的矩形的两边长度,颜色为C的矩形的两边长度。

Output

可以输出"YES",否则输出"NO"。

Sample Input

4 4 2 6 4 2

Sample Output

YES

Hint

例子的图像可以是这样
6
BBBBBB
BBBBBB
AAAACC
AAAACC
AAAACC
AAAACC
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define INF 0x3f3f3f3f
#define ll long long
#define N 100010
#define M 1000000007
using namespace std;
struct zz
{
	int x;
	int y;
	int s;
}p[6];
int cmp(zz a,zz b)
{
	if(a.y==b.y)
		return a.x>b.x;
	return a.y>b.y;
}
int main()
{
	while(scanf("%d%d%d%d%d%d",&p[1].x,&p[1].y,&p[2].x,&p[2].y,&p[3].x,&p[3].y)!=EOF)
	{
		int i,j,k;
		int flag=0;
		int sum=0;
		for(i=1;i<=3;i++)
		{
			int t;
			if(p[i].x>p[i].y)
			{
				t=p[i].x;
				p[i].x=p[i].y;
				p[i].y=t;
			}
			sum+=p[i].x*p[i].y;
		}
		sort(p+1,p+4,cmp);
//		for(i=1;i<=3;i++)
//			printf("%d %d \n",p[i].x,p[i].y);
		if(sum!=p[1].y*p[1].y)
		{
			printf("NO\n");
			continue;
		}
		if(p[1].y==p[2].y&&p[1].y==p[3].y)
		{
			if(p[1].x+p[2].x+p[3].x==p[1].y)
				flag=1;
			else
				flag=0;
		}
		else
		{
			if(p[2].y==p[3].y&&p[2].y+p[1].x==p[1].y)
			{
				if(p[2].x+p[3].x==p[1].y)
					flag=1;
				else
					flag=0;
			}
			else if(p[2].x==p[3].y&&p[2].x+p[1].x==p[1].y)
			{
				if(p[2].y+p[3].x==p[1].y)
					flag=1;
				else
					flag=0;
			}
			else if(p[2].y==p[3].x&&p[2].y+p[1].x==p[1].y)
			{
				if(p[2].x+p[3].y==p[1].y)
					flag=1;
				else
					flag=0;
			}
			else if(p[2].x==p[3].x&&p[2].x+p[1].x==p[1].y)
			{
				if(p[2].y+p[3].y==p[1].y)
					flag=1;
				else
					flag=0;
			}
		}
		if(flag)
			printf("YES\n");
		else
			printf("NO\n");
	}
	return 0;
}

你可能感兴趣的:(NBUT 木块拼接 1655 (模拟))