LEM1 - COIN

Tác giả: RR

Ngôn ngữ: Pascal

//Written by Nguyen Thanh Trung
{$R+,Q+,N+}
{$Mode objFPC}
uses math;
const
  FINP          =       '';
  FOUT          =       '';
  MAXN          =       10111;
  eps           =       1e-12;
type
  real          =       extended;
var
  f1,f2         :       text;
  n             :       longint;
  r             :       array[1..MAXN] of real;

procedure openF;
    begin
      assign(f1,FINP); reset(f1);
      assign(f2,FOUT); rewrite(f2);
    end;
procedure closeF;
    begin
      close(f1);
      close(f2);
    end;
procedure inp;
    begin
      read(f1,n);
      for n:=1 to n do
        read(f1,r[n]);
    end;
procedure solve;
    var
      kq,left,right,mid,sum,a,b,c:real;
    begin
      r[n+1]:=r[1];
      left:=0; right:=0;
      for n:=1 to n do right+=r[n]*2; right/=pi*2;
      while left<right do
        begin
          mid:=(left+right)/2; sum:=0;
          for n:=1 to n do
            begin
              a:=r[n]+mid;
              b:=r[n+1]+mid;
              c:=r[n]+r[n+1];
              sum+=arccos((a*a+b*b-c*c)/2/a/b);
            end;
          if abs(sum-2*pi)<eps then begin writeln(f2,mid:0:3); exit; end;
          if sum<2*pi then
            begin
              kq:=mid;
              right:=mid-eps;
            end
          else left:=mid+eps;
        end;
      writeln(f2,kq:0:3);
    end;

begin
  openF;
  inp;
  solve;
  closeF;
end.

Download