Cod sursa(job #953555)

Utilizator crisbodnarCristian Bodnar crisbodnar Data 26 mai 2013 16:04:36
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

ifstream fin("dezastru.in");
ofstream fout("dezastru.out");

int n, m, x[27];
double p[27];
bool c[27];
double fact = 1, rez;
long long d=1;

void Calculare(){
    double nr = 1;
    for(int i=1; i<=m; i++)
        nr *= p[x[i]];
    nr = (nr/d);
    rez += (double)(nr * fact);
}

void Back(int k){
    if(k == m+1) Calculare();
    else
        for(int j=x[k-1]+1; j <= n; j++)
        if(!c[j]){
            x[k] = j;
            c[j] = 1;
            Back(k+1);
            c[j] = 0;
        }
}

int main()
{
    fin>>n>>m;
    for(int i=1; i<=n; i++)
        fin>>p[i];

    for(int i=m; i>=1; i--)
        fact *= i;
    for(int i=n; n-i<=m; i--)
        d *= i;

    Back(1);
    fout<<setprecision(6)<<fixed<<rez;
    return 0;
}