Pagini recente » Cod sursa (job #654015) | Cod sursa (job #1853998) | Cod sursa (job #2943336) | Cod sursa (job #2403869) | Cod sursa (job #39531)
Cod sursa(job #39531)
{
Problema dezastru
}
Program dezastru;
Type ref = ^elm;
elm = record
x : byte;
adr : ref;
end;
Var pp, fac, prod : real;
n, k, i, j : Byte;
nr : Longint;
v : array[1..25] of Real;
p, pu, u, e : ref;
cod1 : boolean;
Begin
Assign( input, 'dezastru.in' );
Reset( input );
Readln( n, k );
For i := 1 to n do
Read( v[i] );
Close( input );
fac := 1;
For i := 2 to k do
fac := fac * i;
pp := 0;
j := 1;
new( p );
p^.x := 0;
p^.adr := nil;
u := p;
pu := nil;
nr := 0;
Repeat
Repeat
cod1 := false;
if ( u <> nil ) and ( u^.x < n-k+j ) then
Begin
u^.x := u^.x + 1;
cod1 := true;
End;
Until ( ( cod1 ) and ( j <= n ) ) or ( not cod1 );
If cod1 then
if j = k then
Begin
nr := nr+1;
prod := 1;
e := p;
While e <> nil do
Begin
prod := prod*v[e^.x];
e := e^.adr;
End;
pp := pp + fac*prod;
End
else
Begin
j := j+1;
new( e );
pu := u;
e^.x := u^.x;
e^.adr := nil;
u^.adr := e;
u := e;
End
else
Begin
e := u;
u := pu;
dispose( e );
j := j-1;
End;
Until j <= 0;
pp := pp/(nr*fac);
Assign( output, 'dezastru.out' );
Rewrite( output );
Writeln( pp:0:6 );
Close( output );
End.