坑爹啊, 题目很简单要把三个矩形的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;
}