Cod sursa(job #39486)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 26 martie 2007 19:33:02
Problema Dezastru Scor 50
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.64 kb
{
    Problema dezastru
}

Program dezastru;

Var k, n, m, i : byte;
    s : array[1..25] of byte;
    v : array[1..25] of real;
    cod1, cod2 : boolean;
    nr, fac : longint;
    p, suma : real;

Procedure succ( var cod : boolean );
Begin
    if s[k] < n then Begin
                        cod := true;
                        s[k] := s[k]+1;
                     End
                     else cod := false;
End;

Procedure cond( var cod : boolean );
Var i : Integer;
BEgin
    cod := true;
    if k > n then BEgin cod := false; exit; End;
End;

Begin
    Assign( input, 'dezastru.in' );
    Reset( input );
        Readln( n, m );
        For i := 1 to n do
            Read( v[i] );
    Close( input );
    k := 1;
    s[1] := 0;
    nr := 0;
    fac := 1;
    for i := 2 to m do
        fac := fac*i;
    Repeat
        Repeat
            succ( cod1 );
            if cod1 then cond( cod2 );
        Until ( ( cod1 ) and ( cod2 ) ) or ( not cod1 );
        If cod1 then
            If k = m then
                    Begin
                        nr := nr+1;
                        suma := 1;
                        For i := 1 to k do
                            suma := suma*v[s[i]];
                        p := p+fac*suma;
                    End
                    else
                    Begin
                        k := k+1;
                        s[k] := s[k-1];
                    End
                else
                k := k-1;
    Until k <= 0;
    p := p/(nr*fac);
    Assign( output, 'dezastru.out' );
    Rewrite( output );
        Writeln( p:0:6 );
    Close( output );
End.