LEM1 - COIN
Tác giả: ll931110
Ngôn ngữ: Pascal
{$N+}
program LEM1;
uses math;
const
input = '';
output = '';
maxn = 10000 + 2;
eps = 0.00000000001;
eps2 = 0.0000000001;
maxv = 1000000000;
var
n: integer;
a: array[1..maxn] of extended;
res: extended;
procedure init;
var
f: text;
i: integer;
begin
assign(f, input);
reset(f);
readln(f, n);
for i := 1 to n do read(f, a[i]);
a[n + 1] := a[1];
close(f);
end;
function angle(x,y,z: extended): extended;
var
t: double;
begin
t := (y * y + z * z - x * x) / (2 * y * z);
angle := arccos(t);
end;
procedure solve;
var
inf,sup,med: extended;
anl,tmp: extended;
i: integer;
begin
inf := 0;
sup := 2 * maxv;
tmp := 2 * pi;
repeat
med := (inf + sup) / 2;
anl := 0;
for i := 1 to n do
anl := anl + angle(a[i] + a[i + 1],med + a[i],med + a[i + 1]);
if abs(anl - tmp) < eps then
begin
res := med;
exit;
end;
if anl < tmp then sup := med else inf := med;
until sup - inf < eps2;
res := (inf + sup) / 2;
end;
procedure printresult;
var
f: text;
begin
assign(f, output);
rewrite(f);
writeln(f, res:0:3);
close(f);
end;
begin
init;
solve;
printresult;
end.