Cod sursa(job #2504669)

Utilizator CristyXtremeSimion Cristian CristyXtreme Data 5 decembrie 2019 12:49:35
Problema Dezastru Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <iomanip>

using namespace std;

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

void combinari(int idx, int n, int k, vector <double> &p, vector <double> &chosen, int &curr_len, double &sol, int &num_cmb, double &curr_prod) {
    if (curr_len == k) {
        sol += curr_prod;
        num_cmb++;
        return;
    }

    for (int i = idx; i < n; i++) {
        chosen[curr_len++] = p[i];
        curr_prod *= p[i];
        combinari(i + 1, n, k, p, chosen, curr_len, sol, num_cmb, curr_prod);
        curr_len--;
        curr_prod /= p[i];
    }
}

int main() {
    int n, k;
    in >> n >> k;
    vector <double> p(n);
    vector <double> chosen(k);

    for (int i = 0; i < n; i++) {
        in >> p[i];
    }

    int num_cmb = 0, curr_len = 0;
    double sol = 0, curr_prod = 1;
    combinari(0, n, k, p, chosen, curr_len, sol, num_cmb, curr_prod);
    out << fixed << setprecision(10) << sol / num_cmb << '\n';
    return 0;
}