Cod sursa(job #2177678)

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

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

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];
    }
    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;
    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;
}