Pagini recente » Cod sursa (job #2546925) | Cod sursa (job #1599150) | Cod sursa (job #2194030) | Cod sursa (job #1371916) | Cod sursa (job #39541)
Cod sursa(job #39541)
{
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;
pu := p;
While ( pu <> nil ) and ( pu^.adr <> u ) do pu := pu^.adr;
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.