Cod sursa(job #2177684)

Utilizator Constantin.Dragancea Constantin Constantin. Data 18 martie 2018 19:13:50
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>
using namespace std;
typedef long double ld;

long long n, k, b[30];
ld a[30], ans, f[30], nr;

void bktr(int q){
    if (q == k){
        ld rs = 1;
        for (int i=1; i<=k; i++) rs *= a[b[i]];
        ans += rs * f[k];
        nr += f[k];
        return;
    }
    else{
        for (int i=b[q] + 1; n - i >= k - q - 1; i++) b[q + 1] = i, bktr(q + 1);
    }
}

int main(){
    ifstream cin ("dezastru.in");
    ofstream cout ("dezastru.out");
    cin >> n >> k;
    if (!k){
        cout << 0;
        return 0;
    }
    for (int i=1; i<=n; i++) cin >> a[i];
    f[0] = 1;
    for (int i=1; i<=25; i++) f[i] = f[i-1] * i;
    bktr(0);
    cout << fixed << setprecision(6) << ans / nr;
    return 0;
}