Cod sursa(job #135125)

Utilizator free2infiltrateNezbeda Harald free2infiltrate Data 13 februarie 2008 09:40:32
Problema Adapost 2 Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.67 kb
program adapost2;
type vect = record
            a,b : real;
            end;
var N,i :word;
    f : text;
    A : array[1..5000] of vect;
    X : vect;
    Sx : real;


function dist(x,y:real):real;
var S :  real;
begin
S := 0;
for i := 1 to n do
S := S + sqrt(sqr(x-A[i].a)+sqr(y-A[i].b));
dist := S;
end;

procedure parc;
var error : real;
    ok : boolean;
    i : integer;
begin
i := 0;
error := 1;
repeat
repeat
ok := true;
if Sx>dist(X.a,X.b+error) then begin
                          X.b := X.b+error;
                          Sx := dist(X.a,X.b);
                          ok := false;
                          end;
if Sx>dist(X.a,X.b-error) then begin
                          X.b := X.b-error;
                          Sx := dist(X.a,X.b);
                          ok := false;
                          end;
if Sx>dist(X.a+error,X.b) then begin
                          X.a := X.a+error;
                          Sx := dist(X.a,X.b);
                          ok := false;
                          end;
if Sx>dist(X.a-error,X.b) then begin
                          X.a := X.a-error;
                          Sx := dist(X.a,X.b);
                          ok := false;
                          end;
until ok;
error := error/10;
i := i+1;
until i=4;



end;

begin
assign(f,'adapost2.in');
reset(f);

readln(f,N);
for i := 1 to N do
readln(f,A[i].a,A[i].b);
close(f);

X.a := 0;
X.b := 0;
for i := 1 to n do begin
X.a := A[i].a+X.a;
X.b := A[i].b+X.b;
end;
X.a := X.a/n;
X.b := X.b/n;
Sx := dist(X.a,X.b);

parc;

assign(f,'adapost.out');
rewrite(f);

write(f,X.a:1:4,' ',X.b:1:4);


close(f);

end.