Cod sursa(job #994316)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 5 septembrie 2013 12:04:37
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <cstdio>
#include <bitset>

FILE *f=fopen("dezastru.in","r");
FILE *g=fopen("dezastru.out","w");

using namespace std;
const int Nmax = 26;

int v[ Nmax ],N,M;
double prob[ Nmax ],answer;

void calc()
{
    long double rez=1;
    for(int i = 1; i <= M; ++i)
        rez*=1.0*prob[ v[ i ] ];
    answer += rez;
}

void back(int k){
    for( v[k] = v[k-1]+1; v[k] <= N-M+k; ++v[k] )
    if(k<M)
    back(k+1);
    else calc();
}

int main()
{
    fscanf(f,"%d%d",&N,&M);
    for(int i = 1; i <= N; ++i)
        fscanf(f,"%lf",&prob[i]);
    back(1);
    for(int i = 2; i<= M ; ++i ) answer *= i;
    for(int i = N - M +1; i <= N; ++i) answer /= i;
    fprintf(g,"%.6lf",answer);
    return 0;
}