Cod sursa(job #51147)

Utilizator fireatmyselfBogdan-Alexandru Stoica fireatmyself Data 10 aprilie 2007 12:48:31
Problema Adapost 2 Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <stdio.h>
#include <math.h>
#define NMAX 55555
#define eps 1e-10

double X[NMAX], Y[NMAX], Xi, Yi, D;
int N;

double dist(double x1, double y1, double x2, double y2)
{
        return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

int main()
{
        int i;
        double d, s, xi, yi;

        freopen("adapost2.in", "r", stdin);
        scanf("%d", &N);

        for (i = 0; i < N; i++)
        {
            scanf("%lf %lf", X+i, Y+i);
            Xi += X[i]; Yi += Y[i];
        }

        Xi = Xi/(double)N; Yi = Yi/(double)N;

        for (i = 0; i < N; i++)
            d += dist(Xi, Yi, X[i], Y[i]);

        while (fabs(d-D) > eps)
        {
                D = d;
                s = 0;
                xi = Xi; yi = Yi;
                Xi = Yi = 0;
                for (i = 0; i < N; i++)
                {
                    d = dist(xi, yi, X[i], Y[i]);
                    Xi += X[i]/d;
                    Yi += Y[i]/d;
                    s += (1.0/d);
                }
                Xi /= s; Yi /= s;
                d = 0;
                for (i = 0; i < N; i++)
                    d += dist(Xi, Yi, X[i], Y[i]);
        }

        freopen("adapost2.out", "w", stdout);
        printf("%.4lf %.4lf\n", Xi, Yi);

        return 0;
        
}