Cod sursa(job #2765760)

Utilizator DragosC1Dragos DragosC1 Data 29 iulie 2021 20:39:20
Problema Dezastru Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;

int n, k;
long double a[26];

void read() {
    int i;
    ifstream f("dezastru.in");
    f >> n >> k;
    for (i = 1; i <= n; i++)
        f >> a[i];
    f.close();
}

long double rez, C;
int comb[26];

void solutie() {
    int i;
    long double prod = 1;
    for (i = 1; i <= k; i++) 
        prod *= a[comb[i]];
    rez += prod * C;
}

void back(int niv) {
    for (int i = comb[niv - 1] + 1; i <= n - k + niv; i++) {
        comb[niv] = i;
        if (niv < k)
            back(niv + 1);
        else solutie();
    }
}

void solve() {
    int nr1, nr2, i;
    long long fact1, fact2;
    nr1 = k, nr2 = n - k;
    if (nr1 < nr2)
        swap(nr1, nr2);
    fact2 = 1;
    for (i = 1; i <= nr2; i++)
        fact2 *= i;
    fact1 = 1;
    for (i = n; i > nr1; i--)
        fact1 *= i;
    C = fact2 * 1.0 / fact1;
    back(1);
}

void output() {
    ofstream g("dezastru.out");
    g << setprecision(7) << fixed << rez;
    g.close();
}

int main() {
    read();
    solve();
    output();
    return 0;
}