Pagini recente » Cod sursa (job #640139) | Cod sursa (job #2127275) | Cod sursa (job #1696561) | Cod sursa (job #1920051) | Cod sursa (job #394063)
Cod sursa(job #394063)
#include <fstream>
using namespace std;
ifstream in ( "dezastru.in" );
ofstream out ( "dezastru.out" );
int N, K, sol [ 25 ];
double suma, v [ 25 ];
long long cnt;
bool marcat [ 26 ];
void citire ()
{
in >> N >> K;
for ( int i = 1; i <= N; ++i )
in >> v [ i ];
}
void prelucrare ()
{
double sc = 1;
for ( int i = 1; i <= K ; ++i )
sc *= v [ sol [ i ] ];
++cnt;
suma += sc;
}
void prelucrare2 ()
{
double sc = 1;
for ( int i = 1; i <= N ; ++i )
if ( !marcat [ i ] )
sc *= v [ sol [ i ] ];
++cnt;
suma += sc;
}
void bkt2 ( int p )
{
if ( p == N - K + 1 )
{
prelucrare2 ();
return;
}
for ( int i = sol [ p-1 ] + 1; i <= N; ++i )
{
sol [ p ] = i;
marcat [ i ] = true;
bkt2 ( p + 1 );
marcat [ i ] = false;
}
}
void bkt ( int p )
{
if ( p == K + 1 )
{
prelucrare ();
return;
}
for ( int i = sol [ p-1 ] + 1; i <= N; ++i )
{
sol [ p ] = i;
bkt ( p + 1 );
}
}
/*
long long fact ()
{
long long de_returnat = 1;
for ( int i = N - K + 1; i <= N; ++i )
de_returnat *= i;
return de_returnat;
}
*/
int main ()
{
citire ();
bkt ( 1 );
if ( K <= N / 2 )
bkt ( 1 );
else
bkt2 ( 1 );
suma /= cnt;
out << suma;
return 0;
}