Cod sursa(job #188491)

Utilizator CezarMocanCezar Mocan CezarMocan Data 8 mai 2008 18:43:58
Problema Adapost 2 Scor 90
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.36 kb
type punct=record
                x,y:double;
                end;

const dl:array[1..4] of longint=(0,0,1,-1);
      dc:array[1..4] of longint=(1,-1,0,0);

var i,j,n,d:longint;
    step:double;
    r,pmin,p:punct;
    dmin,dd:double;
    v:array[1..50100] of punct;
    ok:boolean;

function dist(a,b:punct):double;
begin
dist:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

begin
assign(input,'adapost2.in');reset(input);
assign(output,'adapost2.out');rewrite(output);
readln(n);
for i:=1 to n do
        begin
        readln(v[i].x,v[i].y);
        r.x:=r.x+v[i].x;
        r.y:=r.y+v[i].y;
        end;
r.x:=r.x/n;
r.y:=r.y/n;
for i:=1 to n do
        dmin:=dmin+dist(v[i],r);
step:=100;
while step>0.0005 do
        begin
        ok:=false;
        for d:=1 to 4 do
                begin
                p.x:=r.x+dl[d]*step;
                p.y:=r.y+dc[d]*step;
                dd:=0;
                for i:=1 to n do
                        dd:=dd+dist(v[i],p);
                if dd<dmin then
                        begin
                        dmin:=dd;
                        pmin:=p;
                        r:=p;
                        ok:=true;
                        end;
                end;
        if not ok then
                step:=step/2;
        end;
writeln(pmin.x:0:4,' ',pmin.y:0:4);
close(input);close(output);
end.