Cod sursa(job #1366891)

Utilizator retrogradLucian Bicsi retrograd Data 1 martie 2015 14:30:25
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<fstream>

using namespace std;
typedef int var;

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

#define MAXN 26

bool USE[MAXN];
float P[MAXN];
float global_prob;
var nr_perm;


inline void calc(var n) {
    float prob = 1;
    for(var i=1; i<=n; i++) {
        if(USE[i])
            prob *= P[i];
    }
    nr_perm ++;
    global_prob += prob;
}


void gen(var &n, var &k, var pas, var taken) {
    if(taken >= k) {
        calc(n);
        return;
    }
    if(pas - 1 + k - taken > n) {
        return;
    }

    //USE[pas] = 0;
    gen(n, k, pas+1, taken);
    USE[pas] = 1;
    gen(n, k, pas+1, taken+1);
    USE[pas] = 0;
}


int main() {
    var n, k;
    fin>>n>>k;
    for(var i=1; i<=n; i++) {
        fin>>P[i];
    }
    gen(n, k, 1, 0);

    fout<<global_prob / nr_perm;

    return 0;
}