Cod sursa(job #113867)

Utilizator moga_florianFlorian MOGA moga_florian Data 11 decembrie 2007 20:04:42
Problema Adapost 2 Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.95 kb
using namespace std;
#include<fstream>
#include<math.h>
#define Nmax 50010

double x[Nmax],y[Nmax];
int N;

double dist(double X, double Y){

    double ret = 0.0,dx,dy;
    for(int i=0;i<N;i++){
        dx = x[i] - X;
        dy = y[i] - Y;
        
        ret += sqrt(dx*dx + dy*dy);
    }
    
    return ret;

}

int main(){

    ifstream fin("adapost2.in");
    FILE *fout=fopen("adapost2.out","w");
    
    fin>>N;
    for(int i=0;i<N;i++)
        fin>>x[i]>>y[i];
        
    double X=500.0,Y=500.0,val,crt,aux,prec;
    crt = dist(X,Y);
    int care;
    
    
    //1.00
    prec = 1.0;
    while(1){

        care = 0;
        val = crt;
        
        aux = dist(X-prec,Y);
        if(aux < val)
            val = aux , care =1;
            
        aux = dist(X,Y-prec);
        if(aux < val)
            val = aux , care =2;
            
        aux = dist(X+prec,Y);
        if(aux < val)
            val = aux , care =3;
            
        aux = dist(X,Y+prec);
        if(aux < val)
            val = aux , care =4;

        if(val < crt){
            crt = val;
            if(care == 1)
                X-=prec;
            else
                if(care == 2)
                    Y-=prec;
                else
                    if(care == 3)
                        X+=prec;
                    else
                        Y+=prec;
        }
        else
            break;
            
    }

//   fprintf(fout,"%.4f %.4f\n",X,Y);

    prec = 0.1;
    while(1){

        care = 0;
        val = crt;

        aux = dist(X-prec,Y);
        if(aux < val)
            val = aux , care =1;

        aux = dist(X,Y-prec);
        if(aux < val)
            val = aux , care =2;

        aux = dist(X+prec,Y);
        if(aux < val)
            val = aux , care =3;

        aux = dist(X,Y+prec);
        if(aux < val)
            val = aux , care =4;

        if(val < crt){
            crt = val;
            if(care == 1)
                X-=prec;
            else
                if(care == 2)
                    Y-=prec;
                else
                    if(care == 3)
                        X+=prec;
                    else
                        Y+=prec;
        }
        else
            break;

    }

    
//    fprintf(fout,"%.4f %.4f\n",X,Y);

    prec = 0.01;
    while(1){

        care = 0;
        val = crt;

        aux = dist(X-prec,Y);
        if(aux < val)
            val = aux , care =1;

        aux = dist(X,Y-prec);
        if(aux < val)
            val = aux , care =2;

        aux = dist(X+prec,Y);
        if(aux < val)
            val = aux , care =3;

        aux = dist(X,Y+prec);
        if(aux < val)
            val = aux , care =4;

        if(val < crt){
            crt = val;
            if(care == 1)
                X-=prec;
            else
                if(care == 2)
                    Y-=prec;
                else
                    if(care == 3)
                        X+=prec;
                    else
                        Y+=prec;
        }
        else
            break;

    }

//    fprintf(fout,"%.4f %.4f\n",X,Y);

    prec = 0.001;
    while(1){

        care = 0;
        val = crt;

        aux = dist(X-prec,Y);
        if(aux < val)
            val = aux , care =1;

        aux = dist(X,Y-prec);
        if(aux < val)
            val = aux , care =2;

        aux = dist(X+prec,Y);
        if(aux < val)
            val = aux , care =3;

        aux = dist(X,Y+prec);
        if(aux < val)
            val = aux , care =4;

        if(val < crt){
            crt = val;
            if(care == 1)
                X-=prec;
            else
                if(care == 2)
                    Y-=prec;
                else
                    if(care == 3)
                        X+=prec;
                    else
                        Y+=prec;
        }
        else
            break;

    }

//    fprintf(fout,"%.4f %.4f\n",X,Y);

    prec = 0.0001;
    while(1){

        care = 0;
        val = crt;

        aux = dist(X-prec,Y);
        if(aux < val)
            val = aux , care =1;

        aux = dist(X,Y-prec);
        if(aux < val)
            val = aux , care =2;

        aux = dist(X+prec,Y);
        if(aux < val)
            val = aux , care =3;

        aux = dist(X,Y+prec);
        if(aux < val)
            val = aux , care =4;

        if(val < crt){
            crt = val;
            if(care == 1)
                X-=prec;
            else
                if(care == 2)
                    Y-=prec;
                else
                    if(care == 3)
                        X+=prec;
                    else
                        Y+=prec;
        }
        else
            break;

    }

    fprintf(fout,"%.4f %.4f\n",X,Y);


    fin.close();
    fclose(fout);
    return 0;

}