Pagini recente » Profil Daria09 | Profil Ionutz_Lala | Profil DraStiK | Rating Teodor (Teodor112) | Cod sursa (job #11897)
Cod sursa(job #11897)
#include <cstdio>
#define maxn 50001
#include <cmath>
#define next(p) (((p)*10+1)/(double)10)
struct point { double x, y;};
point x[maxn];
double distance(point a, point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int n;
double oki(point a)
{
double sum=0;
for(int i=1;i<=n;i++) sum+=distance(a, x[i]);
return sum;
}
int main()
{
int i;
freopen("adapost2.in", "r",stdin);
scanf("%d\n", &n);
for(i=1;i<=n;i++) scanf("%lf %lf\n", &x[i].x, &x[i].y);
//printf("%f\n", x[1].x);
double medx=0, medy=0;
for(i=1;i<=n;i++) medx+=x[i].x, medy+=x[i].y;
medx=medx/(double) n;
medy=medy/(double) n;
freopen("adapost2.out", "w", stdout);
//printf("%lf %lf\n", medx, medy);
double meda=100, medb=100, solx, soly;
double smin=0x3f3f3f3f;
int ok=1;
while(ok)
{
ok=0;
point m;
m.x=medx+meda;
m.y=medy+medb;
double sum=oki(m);
if(smin-sum>=0.001) { ok=1; smin=sum;solx=m.x; soly=m.y;}
m.x=medx+meda;
m.y=medy-medb;
sum=oki(m);
if(smin-sum>=0.001) { ok=1; smin=sum; solx=m.x; soly=m.y;}
m.x=medx-meda;
m.y=medy+medb;
sum=oki(m);
if(smin-sum>=0.001) { ok=1; smin=sum; solx=m.x; soly=m.y;}
m.x=medx-meda;
m.y=medy+medb;
if(smin-sum>=0.001) { ok=1; smin=sum; solx=m.x; soly=m.y;}
meda=meda/2.0;
medb=medb/2.0;
// printf("%lf %lf\n", meda, medb);
}
printf("%lf %lf\n", solx, soly);
return 0;
}