Cod sursa(job #1023735)

Utilizator tudorv96Tudor Varan tudorv96 Data 7 noiembrie 2013 17:21:20
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
using namespace std;

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

const int N = 27;
long double ap[N], f[N], v[N], s;
int n, k, x[N];

void Get_Result(int k) {
    long double p = 1;
    for (int i = 1; i <= k; ++i)
        p *= v[x[i]];
    s += p * ap[k];
}

void Back(int k, int K) {
    for (int i = x[k - 1] + 1; i <= n - K + k; ++i) {
        x[k] = i;
        if (k == K)
            Get_Result(K);
        else
            Back (k + 1, K);

    }
}

int main() {
    fin >> n >> k;
    f[0] = 1;
    for (int i = 1; i <= n; ++i) {
        f[i] = f[i-1] * i;
        fin >> v[i];
    }
    ap[1] = f[n] / n;
    ap[n] = f[n];
    if (k != n)
        for (int i = 2; i <= k; ++i)
            ap[i] = ap[i - 1] * i / (n - i + 1);
    Back (1, k);
    fout << s / f[n];
}