Cod sursa(job #991551)

Utilizator misu007Pogonaru Mihai misu007 Data 30 august 2013 19:05:45
Problema Dezastru Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
/*#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;
}