Pagini recente » Cod sursa (job #2833874) | Cod sursa (job #2134546) | Cod sursa (job #1674667) | Cod sursa (job #1288015) | Cod sursa (job #863868)
Cod sursa(job #863868)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define maxN 30
int N, K;
int x[maxN];
double P[maxN], ans;
double PFact = 1, NFact = 1;
void sol ()
{
double p = 1;
for (int i = 1; i <= N; ++ i)
{
if (! x[i]) continue;
p *= P[i];
}
ans += PFact * p;
}
void back (int p, int S)
{
for (int i = 0; i <= 1; ++ i)
{
x[p] = i;
if (S + i <= K && p <= N)
if (S + i == K && p == N) sol ();
else back (p + 1, S + i);
}
}
int main()
{
freopen ("dezastru.in", "r", stdin);
freopen ("dezastru.out", "w", stdout);
scanf ("%d %d", &N, &K);
for (int i = 1; i <= N; ++ i) scanf ("%lf", &P[i]);
for (int i = 1; i <= K; ++ i) PFact *= i;
for (int i = 1; i <= N; ++ i) NFact *= i;
back (1, 0);
printf ("%.7lf", ans / NFact);
return 0;
}