Pagini recente » Cod sursa (job #122225) | Cod sursa (job #2752268) | Cod sursa (job #1743845) | Cod sursa (job #716477) | Cod sursa (job #130487)
Cod sursa(job #130487)
#include <stdio.h>
#include <math.h>
double a[50005],b[50005];
int n;
double Smin=1000000,x=0,y=0;
void citire()
{
freopen ("adapost2.in","r",stdin);
scanf ("%d",&n);
for ( int i=0 ;i <n ;i++ )
scanf ("%lf%lf",&a[i],&b[i]);
fclose(stdin);
}
double dist (double a,double b,double x,double y)
{
return sqrt ((a-x)*(a-x) + (b-y)*(b-y));
}
void f (double kkt)
{
int ok=1;
while (ok){
ok=0;
double S1=0,S2=0,S3=0,S4=0;
int j;
for (j=0;j<n;j++)
{
S1+=dist(x,y+kkt,a[j],b[j]);
S2+=dist (x+kkt,y,a[j],b[j]);
S3+=dist (x,y-kkt,a[j],b[j]);
S4+=dist (x-kkt,y,a[j],b[j]);
}
double x1=x,y1=y;
if (S1<Smin ){
Smin=S1;
ok=1;
y=y1+kkt;
}
if (S2<Smin ){
Smin=S2;
ok=1;
x=x1+kkt;
}
if (S3<Smin ){
Smin=S3;
y=y1-kkt;
ok=1;}
if (S4<Smin )
{
Smin=S4;
x=x1-kkt;
ok=1;
}
}
}
int main ()
{
citire();
Smin=0;
for (int k=0;k<n;k++)
{
x+=a[k];
y+=b[k];
}
x/=n;
y/=n;
for (int i=0; i<n ;i++)
Smin+=dist (x,y,a[i],b[i]);
f(100);
f(10);
f(1);
f(0.1);
f(0.01);
f(0.001);
f(0.0001);
long x1=x*10000;
long y1=y*10000;
freopen ("adapost2.out","w",stdout);
printf ("%ld.%ld ",x1/10000,x1%10000);
printf ("%ld.%ld\n",y1/10000,y1%10000);
fclose(stdout);
return 0;
}