CF#322-D. Three Logos-模拟水题

坑爹啊,    题目很简单要把三个矩形的logo塞进一个最小的正方形(是正方形)的木板里

直接把三个矩形面积加起来,如果不是一个平方数,直接no

x1 y1 表示矩形的长宽, 自己处理使得  y1>=x1

接下来只有2种情况了!

  一个是  三个矩形横着叠成三层 形如 “三”   条件是 y1==y2==y3==n 切 x1+x2+x3==n

另一个是 一个矩形在上面,两个在下面

 


这种情况 肯定就是  y1||y2||y3 有一个等于n

假设是y1==n

那么只需要满足  用logo2和logo3 看能否拼成 除了logo1占掉的部分了

也就是要求 

x2+x3==n &&y2==y3==n-x1

或者x2+y3==n&&   y2==x2==n-x1

或者x3+y2==n&& x2==x3==n-x1

或者x3=y3 &&y2==x3==n-x1

任一情况满足就可以了


无脑暴力一遍就可以了。。。然后最后代码 的if 之间手残加了个else。。。。过了pre test 死才systemtset。。。。去掉else ,ac


#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
using namespace std;

int min(int a,int b)
{
	return a<b?a:b;
}

int max(int a,int b)
{
	return a>b?a:b;
}
int n=-1;
int show(int a,int b,int c)
{
	int x1=a;
	int x2=b;
	int x3=c;
	int i,j;
	for (j=1;j<=x1;j++)
	{ 
		for (i=1;i<=n;i++)
			printf("A"); 
		printf("\n");
	}
	for (j=1;j<=x2;j++)
	{ 
		for (i=1;i<=n;i++)
			printf("B"); 
		printf("\n");
	}
	for (j=1;j<=x3;j++)
	{ 
		for (i=1;i<=n;i++)
			printf("C"); 
		printf("\n");
	}
	return 0;
}


int main()
{
	
	int i,j;
	int x1,x2,x3,y1,y2,y3;
	scanf("%d%d",&x1,&y1);
	scanf("%d%d",&x2,&y2);
	scanf("%d%d",&x3,&y3);
	if (x1>y1) 
		swap(x1,y1);
	if (x2>y2) 
		swap(x2,y2);
	if (x3>y3) 
		swap(x3,y3);
	
	
	int sum=x1*y1+x2*y2+x3*y3;
	
	
	for (i=2;i<=sqrt(double(sum));i++)
	{
		if (sum%i!=0)
			continue;
		else
		{
			if (i*i==sum)
			{
				n=i;
				break;
			}
		}
	} 
	int wi=n;
	if (n==-1)
	{
		printf("-1\n");
		return 0;
	}
	else
	{  
		if (y2==n&&y3==n&&y1==n)
		{
			if (x1+x2+x3==n)
			{
				printf("%d\n",n);
				show(x1,x2,x3);
				return 0;
			}
			else
			{
				printf("-1\n");
				return 0;
			}
			
		}
		
		int tmpmx=max(y1,max(y2,y3));
		if (tmpmx!=n)
		{
			printf("-1\n");
			return 0;
		}
		if (tmpmx==y1)
		{
			wi-=x1;
			if (x2+x3==n)
			{
				if (y2==wi&&y3==wi)
				{
					printf("%d\n",n);
					for (i=1;i<=x1;i++)
					{
						for (j=1;j<=n;j++)
							printf("A"); 
						printf("\n");
					}
					for (i=1;i<=wi;i++)
					{
						for (j=1;j<=n;j++)
						{
							if (j<=x2)
								printf("B");
							else
								printf("C");
						}
						printf("\n");
					}
					return 0;
					
					
				}
			}
			
				if (x2+y3==n)
				{
					if (y2==wi&&x3==wi)
					{
						printf("%d\n",n);
						for (i=1;i<=x1;i++)
						{
							for (j=1;j<=n;j++)
								printf("A"); 
							printf("\n");
						}
						for (i=1;i<=wi;i++)
						{
							for (j=1;j<=n;j++)
							{
								if (j<=x2)
									printf("B");
								else
									printf("C");
							}
							printf("\n");
						}
						return 0;
						
						
					}
				}
				
					if (y2+y3==n)
					{
						if (x2==wi&&x3==wi)
						{
							printf("%d\n",n);
							for (i=1;i<=x1;i++)
							{
								for (j=1;j<=n;j++)
									printf("A"); 
								printf("\n");
							}
							for (i=1;i<=wi;i++)
							{
								for (j=1;j<=n;j++)
								{
									if (j<=y2)
										printf("B");
									else
										printf("C");
								}
								printf("\n");
							}
							return 0;
							
							
						}
					}
					
						if (y2+x3==n)
						{
							if (x2==wi&&y3==wi)
							{
								printf("%d\n",n);
								for (i=1;i<=x1;i++)
								{
									for (j=1;j<=n;j++)
										printf("A"); 
									printf("\n");
								}
								for (i=1;i<=wi;i++)
								{
									for (j=1;j<=n;j++)
									{
										if (j<=y2)
											printf("B");
										else
											printf("C");
									}
									printf("\n");
								}
								return 0;
								
								
							}
						}
						
						
		}
		else
			if (tmpmx==y2)
			{
				wi-=x2;
				if (x1+x3==n)
				{
					if (y1==wi&&y3==wi)
					{
						printf("%d\n",n);
						for (i=1;i<=x2;i++)
						{
							for (j=1;j<=n;j++)
								printf("B"); 
							printf("\n");
						}
						for (i=1;i<=wi;i++)
						{
							for (j=1;j<=n;j++)
							{
								if (j<=x1)
									printf("A");
								else
									printf("C");
							}
							printf("\n");
						}
						
						return 0;
					}
				}
				
					if (y1+x3==n)
					{
						if (x1==wi&&y3==wi)
						{
							printf("%d\n",n);
							for (i=1;i<=x2;i++)
							{
								for (j=1;j<=n;j++)
									printf("B"); 
								printf("\n");
							}
							for (i=1;i<=wi;i++)
							{
								for (j=1;j<=n;j++)
								{
									if (j<=y1)
										printf("A");
									else
										printf("C");
								}
								printf("\n");
							}
							
							return 0;
						}
					}
				
						if (y1+y3==n)
						{
							if (x1==wi&&x3==wi)
							{
								printf("%d\n",n);
								for (i=1;i<=x2;i++)
								{
									for (j=1;j<=n;j++)
										printf("B"); 
									printf("\n");
								}
								for (i=1;i<=wi;i++)
								{
									for (j=1;j<=n;j++)
									{
										if (j<=y1)
											printf("A");
										else
											printf("C");
									}
									printf("\n");
								}
								
								return 0;
							}
						}	
					
							if (x1+y3==n)
							{
								if (y1==wi&&x3==wi)
								{
									printf("%d\n",n);
									for (i=1;i<=x2;i++)
									{
										for (j=1;j<=n;j++)
											printf("B"); 
										printf("\n");
									}
									for (i=1;i<=wi;i++)
									{
										for (j=1;j<=n;j++)
										{
											if (j<=x1)
												printf("A");
											else
												printf("C");
										}
										printf("\n");
									}
									
									return 0;
								}
							}
							
							
			}
			else
				if (tmpmx==y3)
				{
					wi-=x3;
					if (x2+x1==n)
					{
						if (y1==wi&&y2==wi)
						{
							printf("%d\n",n);
							for (i=1;i<=x3;i++)
							{
								for (j=1;j<=n;j++)
									printf("C"); 
								printf("\n");
							}
							for (i=1;i<=wi;i++)
							{
								for (j=1;j<=n;j++)
								{
									if (j<=x1)
										printf("A");
									else
										printf("B");
								}
								printf("\n");
							}
							return 0;
							
						}
					}
					
						if (x2+y1==n)
						{
							if (x1==wi&&y2==wi)
							{
								printf("%d\n",n);
								for (i=1;i<=x3;i++)
								{
									for (j=1;j<=n;j++)
										printf("C"); 
									printf("\n");
								}
								for (i=1;i<=wi;i++)
								{
									for (j=1;j<=n;j++)
									{
										if (j<=y1)
											printf("A");
										else
											printf("B");
									}
									printf("\n");
								}
								return 0;
								
							}
						}	
							if (y2+y1==n)
							{
								if (x1==wi&&x2==wi)
								{
									printf("%d\n",n);
									for (i=1;i<=x3;i++)
									{
										for (j=1;j<=n;j++)
											printf("C"); 
										printf("\n");
									}
									for (i=1;i<=wi;i++)
									{
										for (j=1;j<=n;j++)
										{
											if (j<=y1)
												printf("A");
											else
												printf("B");
										}
										printf("\n");
									}
									return 0;
									
								}
							}	
								if (y2+x1==n)
								{
									if (y1==wi&&x2==wi)
									{
										printf("%d\n",n);
										for (i=1;i<=x3;i++)
										{
											for (j=1;j<=n;j++)
												printf("C"); 
											printf("\n");
										}
										for (i=1;i<=wi;i++)
										{
											for (j=1;j<=n;j++)
											{
												if (j<=x1)
													printf("A");
												else
													printf("B");
											}
											printf("\n");
										}
										return 0;
										
									}
								}
								
								
				}
				printf("-1\n");
				return 0;
				
				
	}
	
	
	
	return 0;
	
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值