Cod sursa(job #50001)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 6 aprilie 2007 18:31:30
Problema Dezastru Scor 50
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.14 kb
var a:array[1..25] of real;
    st:array[1..25] of byte;
    n,k,i,m:byte;
    pi,s:real;
    variante:longint;
    f,g:text;
    as,ev:boolean;
procedure init;
begin
st[k]:=0;
end;
procedure succesor;
begin
if st[k]<n then begin
                  as:=true;
                  st[k]:=st[k]+1;
                end
           else as:=false;
end;
procedure valid;
begin
ev:=true;
for i:=1 to k-1 do if (st[i]=st[k]) or (st[i]=0) then ev:=false;
end;
function solutie(k:integer):boolean;
begin
solutie:=k=m;
end;
procedure tipar;
begin
variante:=variante+1;
pi:=1;
for i:=1 to k do pi:=pi*a[st[i]];
s:=s+pi;
end;
begin
assign(f,'dezastru.in'); reset(f);
assign(g,'dezastru.out'); rewrite(g);
read(f,n,m);
for i:=1 to n do read(f,a[i]);
k:=1;
init;
variante:=0;
s:=0;
while k>0 do begin
  repeat
    succesor;
    if as then valid;
  until (not as) or (as and ev);
  if as then if solutie(k) then tipar
                           else begin
                             k:=k+1;
                             init;
                           end
        else k:=k-1;
end;
write(g,(s/variante):0:6);
close(g);
end.