Cod sursa(job #887672)

Utilizator Theorytheo .c Theory Data 23 februarie 2013 23:49:09
Problema Dezastru Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>
#include<iomanip>

using namespace std;

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

const int Eps = 0.000001;

int Sol[26]; int N; int K; double Sum; double V[30];

void Add(){
    double X = 1;

    for(int i = 1; i <= K; ++i)
        X *= V[Sol[i]];
    Sum += X;
}


void Back(int k){

    if(k - 1 == K)
        Add();
    else
        for(int i = Sol[k - 1] + 1; i <= N; ++i){
            Sol[k] = i; Back(k + 1);
        }
}

void Read() {

    fin >> N >> K;
    for(int i = 1 ;i <= N; ++i)  fin >> V[i];
}

void Print(){

    long long  Comb = 1;
    for(int i = K + 1; i <= N; ++i) Comb *= i;

    for(int i = 1; i <= N - K ; ++i)  Comb /= i;

    fout << fixed << setprecision(6) << Sum/Comb;
}

int main(){

    Read();

    Back(1); Print();

    return 0;
}