木块拼接


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;
}