Cod sursa(job #1773619)

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

double f[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 i,N,K;
    double 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;
    while(1)
    {
        temp = 1;
        for(i = 1; i <= K; ++i) temp = temp * f[ v[i] ];

        sum = sum + temp;
        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;
}