Cod sursa(job #2504801)

Utilizator bleo16783FMI Bleotiu Cristian bleo16783 Data 5 decembrie 2019 16:37:21
Problema Dezastru Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
using namespace std;
#define N 32

long double S = 1, ans, v[N], P, cnt;
int sel[N], n, k;

void bkt1 (long double p, int it){
    if (it == k){
        ++cnt;
        P += S / p;
        return;
    }
    for (int i = 0; i < n; ++i)
    if (!sel[i]){
        sel[i] = 1;
        bkt1 (p * v[i],it + 1);
        sel[i] = 0;
    }
}

void bkt2 (long double p, int it){
    if (it == k){
        ++cnt;
        P += p;
        return;
    }
    for (int i = 0; i < n; ++i)
    if (!sel[i]){
        sel[i] = 1;
        bkt2 (p * v[i],it + 1);
        sel[i] = 0;
    }
}
int main()
{
    ifstream fin ("dezastru.in");
    ofstream fout ("dezastru.out");
    fin >> n >> k;
    for (int i = 0; i < n; ++i){
        fin >> v[i];
        S *= v[i];
    }
    if (k > n - k){
        k = n - k;
        bkt1 (1.0, 0);
    }
    else
        bkt2 (1.0, 0);
    ans = P / cnt;
    fout << ans;
    return 0;
}