Cod sursa(job #1766909)

Utilizator RaresEGaySopterean Adrian RaresEGay Data 28 septembrie 2016 17:01:42
Problema Dezastru Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <iomanip>
using namespace std;

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

int V[26];
float S[26], N, M;
float Sum, P, nrComb;

void Read(){
    f >> N >> M;
    for (int i = 1; i <= N; ++i)
        f >> S[i];
}

int Condition(int k){
    if (V[k] < N){
        V[k]++; return 1;
    }
    return 0;
}

int Verification(int k){
    for (int i = 1; i < k; ++i){
        if (V[i] == V[k] or V[i] > V[k]) return 0;
    }
    return 1;
}

void sumFunction(){
    P = 1;
    for (int i = 1; i <= M; ++i){
        P*=S[V[i]];
    }
    Sum+=P;
}

void BKTR(int k){
    V[k] = 0;
    while (Condition(k)){
        if (Verification(k)){
            if (k == M) nrComb++, sumFunction();
            else BKTR(k+1);
        }
    }
}

int main(){
    Read();
    BKTR(1);
    g << setprecision(6) << Sum/nrComb;
    return 0;
}