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