记录编号 |
37371 |
评测结果 |
AAAAAAAAAAAAAAAAAAAAA |
题目名称 |
铺放矩形块 |
最终得分 |
100 |
用户昵称 |
Czb。 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.007 s |
提交时间 |
2012-03-28 20:20:18 |
内存使用 |
0.27 MiB |
显示代码纯文本
#include<stdio.h>
#include<stdlib.h>
int ans,top,t[5],a[5][2],x[5],y[5];
bool flag[5];
struct orz
{
int x,y;
}f[1000];
inline int max(int a,int b)
{
return a>b?a:b;
}
inline int min(int a,int b)
{
return a<b?a:b;
}
void swap(int &a,int &b){a^=b^=a^=b;}
void solve()
{
int xx,yy;
//------case1------
xx=yy=0;
for(int i=1;i<=4;i++)
{xx+=x[i];yy=max(yy,y[i]);}
if(xx>yy)swap(xx,yy);
if(xx*yy<ans){ans=xx*yy;top=1;f[1].x=xx;f[1].y=yy;}
else if(xx*yy==ans){top++;f[top].x=xx;f[top].y=yy;}
//------case2------
xx=yy=0;
for(int i=1;i<=3;i++)
{xx+=x[i];yy=max(yy,y[i]);}
xx=max(xx,x[4]);yy+=y[4];
if(xx>yy)swap(xx,yy);
if(xx*yy<ans){ans=xx*yy;top=1;f[1].x=xx;f[1].y=yy;}
else if(xx*yy==ans){top++;f[top].x=xx;f[top].y=yy;}
//------case3------
xx=yy=0;
xx=x[1]+x[2];yy=max(y[1],y[2]);
xx=max(xx,x[3]);yy+=y[3];
xx+=x[4];yy=max(yy,y[4]);
if(xx>yy)swap(xx,yy);
if(xx*yy<ans){ans=xx*yy;top=1;f[1].x=xx;f[1].y=yy;}
else if(xx*yy==ans){top++;f[top].x=xx;f[top].y=yy;}
//------case4------
xx=yy=0;
xx=max(x[1],x[2]);yy=y[1]+y[2];
xx+=x[3];yy=max(yy,y[3]);
xx+=x[4];yy=max(yy,y[4]);
if(xx>yy)swap(xx,yy);
if(xx*yy<ans){ans=xx*yy;top=1;f[1].x=xx;f[1].y=yy;}
else if(xx*yy==ans){top++;f[top].x=xx;f[top].y=yy;}
//------case5------
xx=yy=0;
xx=max(x[1]+x[3],x[2]+x[4]);
if(x[3]<x[4]&&x[1]>x[2]&&y[1]<y[3]&&y[2]>y[4])yy=max(y[1]+y[2],y[3]+y[4]);
else yy=max(y[1],y[3])+max(y[2],y[4]);
if(xx>yy)swap(xx,yy);
if(xx*yy<ans){ans=xx*yy;top=1;f[1].x=xx;f[1].y=yy;}
else if(xx*yy==ans){top++;f[top].x=xx;f[top].y=yy;}
}
void work()
{
for(int i=0;i<=1;i++)
{
for(int j=0;j<=1;j++)
{
for(int k=0;k<=1;k++)
{
for(int l=0;l<=1;l++)
{
x[1]=a[t[1]][i];
y[1]=a[t[1]][!i];
x[2]=a[t[2]][j];
y[2]=a[t[2]][!j];
x[3]=a[t[3]][k];
y[3]=a[t[3]][!k];
x[4]=a[t[4]][l];
y[4]=a[t[4]][!l];
solve();
}
}
}
}
}
void dfs(int k)
{
if(k>4)
{
work();
return;
}
for(int i=1;i<=4;i++)
{
if(!flag[i])
{
flag[i]=true;
t[k]=i;
dfs(k+1);
flag[i]=false;
}
}
}
int cmp(const void *a,const void *b)
{
return (*(orz *)a).x-(*(orz *)b).x;
}
int main(int argc,char *argv[])
{
freopen("packrec.in","r",stdin);
freopen("packrec.out","w",stdout);
for(int i=1;i<=4;i++)scanf("%d%d",&a[i][0],&a[i][1]);
ans=~0U>>1;
dfs(1);
qsort(f+1,top,sizeof(orz),cmp);
printf("%d\n",ans);
for(int i=1;i<=top;i++)if(f[i].x!=f[i-1].x)printf("%d %d\n",f[i].x,f[i].y);
return 0;
}