Cod sursa(job #1403672)

Utilizator felixiPuscasu Felix felixi Data 27 martie 2015 15:04:46
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <cstring>
#include <iomanip>

using namespace std;

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

const int NMAX = 25;

long long Ans = 0, fact[NMAX+2];
double Sum = 0;
double v[NMAX+2], p[NMAX+2];
int N,K;
double Prod = 1;

void init() {
    fact[0] = fact[1] = 1;
    for( int i = 2;  i <= N;  ++i ) fact[i] = fact[i-1]*i;
}

void BKT( int pas ) {
    if( pas == K+1 ) {
        ++Ans;
        Sum += Prod;
    }
    else {
    double Cprod = Prod;
    for( int i = p[pas-1] + 1;  i <= N - ( K-pas );  ++i ) {
        Prod *= v[i];
        p[ pas ] = i;
        BKT( pas + 1 );
        Prod = Cprod;
    }
    }
}

int main() {

    in >> N >> K;
    init();
    for( int i = 1;  i <= N;  ++i )  in >> v[i];
    BKT(1);
    out << setprecision(6) << fixed << Sum/Ans << '\n';
    return 0;
}