题意:
给出三块矩形的大小,求是否能铺满一个正方形的区域。因为只有三个矩形,所以情况不会很多,而且题目说只需要输出任意一种满足情况的条件就可以。所以我们利用贪心的思想去填充区域,注意每次更新目标区域的起点坐标和终点坐标。
代码实现:
#include <bits/stdc++.h>
using namespace std;
const int MAX = 105;
struct node{
int x,y;
char tempo;
friend bool operator < ( node a,node b ){
if( a.x != b.x ){
return a.x > b.x;
}
return a.y>b.y;
}
};
int len;
int cnt;
bool flag;
node Lis[3];
char square[MAX][MAX];
char tag[3]={'A','B','C'};
void print();
int main()
{
len = 0;
cnt = 0;
flag = true;
for( int i = 0; i < 3; i++ ){
int a,b;
scanf("%d%d",&a,&b);
if( a < b ){
swap(a,b);
}
Lis[i].x = a;
Lis[i].y = b;
Lis[i].tempo = tag[i];
len = max(len,a);
}
int x = len;
int y = len;
int px = 0;
int py = 0;
int tx = 0;
int ty = 0;
sort(Lis,Lis+3);
for( int t = 0; t < 3; t++ ){
if( Lis[t].x == x ){
tx = px+Lis[t].x;
ty = py+Lis[t].y;
y -= Lis[t].y;
}
else if( Lis[t].x == y ){
tx = px+Lis[t].y;
ty = py+Lis[t].x;
x -= Lis[t].y;
}
else if( Lis[t].y == y ){
tx = px+Lis[t].x;
ty = py+Lis[t].y;
x -= Lis[t].x;
}
if( tx>len || ty>len ){
flag = false;
len = -1;
break;
}
for( int i = py; i < ty; i++ ){
for( int j = px; j < tx; j++ ){
square[i][j] = Lis[t].tempo;
cnt++;
}
}
if( tx == len ){
py = ty;
}
else{
px = tx;
}
//printf("px:%d py:%d\n",px,py);
//print();
}
if( cnt != len*len ){
flag = false;
len = -1;
}
printf("%d\n",len);
print();
return 0;
}
void print(){
for( int i = 0; i < len; i++ ){
for( int j = 0; j < len; j++ ){
printf("%c",square[i][j]);
}
printf("\n");
}
return ;
}