Cod sursa(job #2567361)

Utilizator serafimalex2001Serafim Alex serafimalex2001 Data 3 martie 2020 16:50:45
Problema Dezastru Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

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

double prob[29];
int fact[13];
int n,c;
int viz[29];

double total;

int sol[29];

void Add(int k)
{
    double prod = 1;
    for(int i = 1; i<=k; ++i)
    {
        prod = 1.0*prod*(prob[sol[i]]);
    }
    total += prod;
}

bool Valid (int k)
{
    for(int i = 2; i<=k; ++i)
        if(sol[i] < sol[i-1])
            return false;
    return true;
}

void Back(int k)
{
    for(int i = k; i<=n; ++i)
        if(viz[i] == 0)
        {
            viz[i] = 1;
            sol[k] = i;
            if(Valid(k))
            {
                if( k == c )
                    Add(k);
                else Back(k+1);
            }
            viz[i] = 0;
        }
}

void Calc()
{
    int i;
    double sum = 1;
    for(i = c+1; i<=n; ++i)
    {
        sum *= 1.0*total/i;
    }
    fout<<sum<<fixed<<setprecision(6);
}

void Read()
{
    fin>>n>>c;
    for(int i = 1; i<=n; ++i)
        fin>>prob[i];
    for(int i = 2; i<=12; ++i)
        fact[i] = fact[i-1] * 2;
}

void Do()
{
    Back(1);
    Calc();
}

int main()
{
    Read();
    Do();
    return 0;
}