Pagini recente » Cod sursa (job #2824737) | Cod sursa (job #1433233) | Cod sursa (job #2095657) | Cod sursa (job #1773402) | Cod sursa (job #1450964)
/*
If you can't explain it simply, you don't understand it well enough.
*/
#include <cstdio>
using namespace std;
const int Nmax = 30;
int n, k , i , x;
double sum;
double p[Nmax];
void verif()
{
double probability = 1.0;
for (int i = 1; i <= n; ++i)
if ((x >> i) & 1)
probability *= p[i];
sum += probability;
}
void generare(int niv , int ind)
{
if (niv == k + 1)
verif();
else
{
if (n - ind < k - niv + 1)
return;
for (int i = ind + 1; i <= n; ++i)
{
x ^= (1 << i);
generare(niv + 1 , i);
x ^= (1 << i);
}
}
}
int main()
{
freopen("dezastru.in","r",stdin);
freopen("dezastru.out","w",stdout);
scanf("%d %d", &n, &k);
for (i = 1; i <= n; ++i)
scanf("%lf", &p[i]);
generare(1 , 0);
for (i = k + 1; i <= n; ++i)
sum /= (1.0 * i);
printf("%.6lf", sum);
return 0;
}