/*
ID: niepeng1
PROG: fence3
LANG: C++
*/
/*
由于在一定范围内肯定越靠近目标点,距离和越小。
于是枚举所有范围内的点。
每次枚举的点间距离减为上次的1/10,最后求出最短距离。
只是最后枚举边界,为什么要增大那么多???
难道让我们多次后校正吗?
*/
#include<math.h>
#include<iostream>
using namespace std;
const double INF=1e-7;
struct node{
double lx;
double ly;
double rx;
double ry;
};
node fence[150];
double ansx,ansy,ansdis,tem;
int fencenum;
double mintotal,temtotal;
inline double dis(double x,double y,double x1,double y1)
{
return sqrt( (x-x1)*(x-x1)+(y-y1)*(y-y1) );
}
double caldis(double x,double y)
{
int i;
temtotal=0;
for(i=0;i<fencenum;i++)
{
if(fence[i].rx==fence[i].lx)
{
if(y<fence[i].ly) temtotal+=dis(x,y,fence[i].lx,fence[i].ly);
else if(y>fence[i].ry) temtotal+=dis(x,y,fence[i].rx,fence[i].ry);
else temtotal += fabs(x-fence[i].rx);
}
else
{
if(x<fence[i].lx) temtotal+=dis(x,y,fence[i].lx,fence[i].ly);
else if(x>fence[i].rx) temtotal+=dis(x,y,fence[i].rx,fence[i].ry);
else temtotal += fabs(y-fence[i].ry);
}
}
return temtotal;
}
int main()
{
freopen("fence3.in","r",stdin);
freopen("fence3.out","w",stdout);
scanf("%d",&fencenum);
int i;
for(i=0;i<fencenum;i++)
{
scanf("%lf%lf%lf%lf",&fence[i].lx,&fence[i].ly,&fence[i].rx,&fence[i].ry);
if(fence[i].lx>fence[i].rx){
tem=fence[i].lx;
fence[i].lx=fence[i].rx;
fence[i].rx=tem;
}
if(fence[i].ly>fence[i].ry){
tem=fence[i].ly;
fence[i].ly=fence[i].ry;
fence[i].ry=tem;
}
}
double grid=10,area=100;
double temdis,ix,iy,pointx,pointy;
ansx=50;ansy=50;
ansdis=caldis(ansx,ansy);
for(;area>0.1;area/=10,grid/=10)
{
pointx=ansx;pointy=ansy;
for(ix=pointx-area/2-0.5;ix<=pointx+area/2+0.5;ix+=grid)
for(iy=pointy-area/2-0.5;iy<=pointy+area/2+0.5;iy+=grid)
{
/* if( fabs(ix-55.0)<INF && fabs(iy-55.7)<INF)
printf(" ");
*/
temdis=caldis(ix,iy);
if( temdis < ansdis)
{
ansdis=temdis;
ansx=ix;
ansy=iy;
}
}
}
printf("%.1lf %.1lf %.1lf/n",double(int(ansx*10+0.5))/10.0,double(int(ansy*10+0.5))/10.0,ansdis);
return 0;
}