Cod sursa(job #1773630)

Utilizator silkMarin Dragos silk Data 7 octombrie 2016 23:56:42
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#define NMax 25

double f[NMax+1],ant[NMax+1];
int C[NMax+1][NMax+1];
int v[NMax+1];

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];
}

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

    int idx,i,N,K;
    double prec,temp,sum=0,base=1;

    Precalc();

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

    for(i = 1; i <= K; ++i) v[i] = i;
    idx = ant[0] = 1;
    while(1)
    {
        for(i = idx; i <= K; ++i) ant[i] = ant[i-1] * f[ v[i] ];

        sum = sum + ant[K];
        for(i = K; i >= 1 && v[i]==N+i-K; --i);
        if( i < 1 ) break;
        ++v[i];
        for(++i; i <= N; ++i) v[i] = v[i-1]+1;
    }

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



return 0;
}