Cod sursa(job #2507053)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 9 decembrie 2019 15:48:02
Problema Dezastru Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;
int N, K;
float p[30];
float P = 1, rez = 0, Pt=1;
bool viz[30];
int ct;

void Back(int top, bool mode) {
    if (top == K + 1) {
        if(mode==0) {
            rez += P;
            ct++;
        }
        else {
            rez += Pt/P;
            ct++;
        }
        // cout << P << "\n";
    } else
        for (int i = 1; i <= N; i++) {
            if (viz[i] == 0) {
                viz[i] = true;
                P *= p[i];
                Back(top + 1,mode);
                P /= p[i];
                viz[i] = false;
            }
        }
}

int main() {
    ifstream fin("dezastru.in");
    ofstream fout("dezastru.out");
    fin >> N >> K;
    for (int i = 1; i <= N; i++) {
        fin >> p[i];
        Pt*=p[i];
    }
    if (K <= N / 2) {
        Back(1, false);
        fout << fixed << setprecision(6) << rez / (float) ct;
    }
    else {
        K=N-K;
        Back(1,true);
        fout << fixed << setprecision(6) <<rez / (float) ct;
    }
}