Cod sursa(job #40443)

Utilizator thestickTudor A thestick Data 27 martie 2007 14:01:34
Problema Adapost Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define TMIC 0.0000001
#define STEP 0.9
#define TSTART 50
#define NP 50000
long n;

double x[NP],y[NP];
double sx,sy,ax=0,ay=0,d,sd;

double dist(double px,double py)
{
double dt=0;
long i;
for(i=0;i<n;i++)
dt+=sqrt((px-x[i])*(px-x[i])+(py-y[i])*(py-y[i]));
return dt;
}

void cit()
{
long i;
FILE *f=fopen("adapost2.in","r");
fscanf(f,"%d",&n);
for(i=0;i<n;i++)
{
fscanf(f,"%lf %lf",&x[i],&y[i]);
ax+=x[i]/n;
ay+=y[i]/n;
}
fclose(f);
}

void tip()
{
FILE *f;
f=fopen("adapost2.out","w");
fprintf(f,"%.4lf %.4lf\n",sx,sy);
fclose(f);
}

void rez()
{
double t;

sd=dist(ax,ay);
sx=ax;
sy=ay;
for(t=TSTART;t>TMIC;)
        {
        d=0;
        d=dist(sx,sy+t);
        if(d<sd)
                {
                sd=d;
                sy+=t;
                t*=STEP;
                }
        d=0;
        d=dist(sx,sy-t);
        if(d<sd)
                {
                sd=d;
                sy-=t;
                t*=STEP;
                }
        d=0;
        d=dist(sx+t,sy);
        if(d<sd)
                {
                sd=d;
                sx+=t;
                t*=STEP;
                }
        d=0;
        d=dist(sx-t,sy);
        if(d<sd)
                {
                sd=d;
                sx-=t;
                t*=STEP;
                }
        t*=STEP;
        }
}

int main()
{
cit();
rez();
tip();
return 0;
}