Cod sursa(job #3196067)

Utilizator alexandrubilaBila Alexandru-Mihai alexandrubila Data 22 ianuarie 2024 18:31:12
Problema Dezastru Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <iomanip>

using namespace std;

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

double P[30];
int sol[30]; // vectorul de solutii pentru BT;
int N, K;
double val = 0.0;

void prelucrare()
{
    double res = 1.0;
    for (int i = 1; i <= K; i++)
        res = res * P[sol[i]];
    val += res;
}

void BT(int i)
{
    if (i > K)
        prelucrare();
    else
    {
        for (int j = sol[i - 1] + 1; j <= N; j++)
        {
            sol[i] = j;
            BT(i + 1);
        }
    }
}

int main()
{
    double nFact = 1.0;
    double n_kFact = 1.0;
    double kFact = 1.0;
    sol[0] = 0; /// artificiu;
    ///
    f >> N >> K;
    for (int i = 1; i <= N; i++)
    {
        f >> P[i];
        nFact *= i;
    }
    //
    for (int i = 1; i <= K; i++)
        kFact = kFact * i;
    //
    for (int i = 1; i <= N - K; i++)
        n_kFact *= i;
    //
    BT(1);
    //
    val = val * kFact * n_kFact / nFact;
    g << fixed << setprecision(6) << val << '\n';

    return 0;
}