Cod sursa(job #737583)
#include <cstdio>
using namespace std;
const int MAXN = 30;
double p[MAXN];
double a[MAXN][MAXN];
int n,k;
void citire()
{
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]);
}
long long combinari(int n,int k)
{
long long rasp = 1;
if (n - k > k)
{
for (int i = n - k + 1;i <= n;++i)
rasp *= i;
for (int i = 1;i <= k;++i)
rasp /= k;
}
else
{
for (int i = k + 1;i <= n;++i)
rasp *= i;
for (int i = 1;i <= n - k;++i)
rasp /= i;
}
return rasp;
}
void dinamica()
{
a[0][0] = 1;
for (int i = 1;i <= n;++i)
for (int j = 0;j <= i;++j)
a[i][j] = a[i - 1][j] + a[i - 1][j - 1] * p[i];
}
int main()
{
citire();
dinamica();
printf ("%.6lf",a[n][k] / combinari(n,k));
return 0;
}