Cod sursa(job #1773638)

Utilizator silkMarin Dragos silk Data 8 octombrie 2016 00:08:41
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>
#define NMax 25
#define dab double

dab f[NMax+1];
dab sum;
int C[NMax+1][NMax+1];
int v[NMax+1];
int N,K;

void Precalc()
{
    int i,j;

    C[1][0] = C[0][0] = 1;
    for(i = 1; i <= NMax; ++i)
        for(j = 0; j <= i; ++j) C[i][j] = C[i-1][j-1] + C[i-1][j];
}

inline void back(int k, dab temp, int last)
{
    if (k == K + 1) sum += temp;
    else
    {
        for (int i = last + 1; i <= N - K + k; i++)
        back(k + 1, temp * f[i], i);
    }
}

int main(){
    freopen("dezastru.in","r",stdin);
    freopen("dezastru.out","w",stdout);

    int i;
    dab base;

    Precalc();

    scanf("%d %d",&N,&K);
    for(i = 1; i <= N; ++i) scanf("%lf",&f[i]);
    base = C[N][K];

    back(1, 1 , 0);

    printf("%f\n", sum/base );



return 0;
}