Pagini recente » Cod sursa (job #652123) | Cod sursa (job #3031731) | Cod sursa (job #1479068) | Cod sursa (job #2236754) | Cod sursa (job #991551)
Cod sursa(job #991551)
/*#include <cstdio>
using namespace std;
int n,k1;
double p1=1,pt,p[25];
void back(int k,int t,long double pr)
{
if(k==k1)
{
pt+=2*pr;
}
else
{
for(int i=t;i<n;++i)
{
back(k+1,i+1,pr*p[i]);
}
}
}
void fact()
{
for(int i=2;i<=n;++i)
{
p1*=(double)(1)/(double)(i);
}
}
int main()
{
freopen("dezastru.in","r",stdin);
freopen("dezastru.out","w",stdout);
int i;
scanf("%d%d",&n,&k1);
for(i=0;i<n;++i) scanf("%lf",&p[i]);
back(0,0,1);
fact();
printf("%.6lf\n",pt*p1);
return 0;
}*/
using namespace std;
#include <cstdio>
int N, K, C[64][64];
double v[64], sum;
void back(int lev, int f, double p)
{
int i;
if (lev == K)
sum += p;
else
for (i = f; N+lev >= K+i; ++i)
back(lev+1, i+1, p*v[i]);
}
int main()
{
int i, j;
freopen("dezastru.in", "r", stdin);
freopen("dezastru.out", "w", stdout);
scanf("%d %d", &N, &K);
for (i = 0; i < N; ++i)
scanf("%lf", v+i);
sum = 0.;
back(0, 0, 1.);
for (i = 0; i <= N; ++i)
for (C[i][0] = 1, j = 1; j <= i; ++j)
C[i][j] = C[i-1][j]+C[i-1][j-1];
printf("%lf\n", sum/(double)C[N][K]);
return 0;
}