Cod sursa(job #2493406)

Utilizator Serban_sebastianSerban Sebastian Mihai Serban_sebastian Data 16 noiembrie 2019 12:04:34
Problema Dezastru Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream>
#include<algorithm>
#include<iomanip>
using namespace std;
ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
int n, k, st[30], l;
double v[30], g[100005], prob_alive, arj;

bool validare(int niv)
{
    for(int i=1; i<niv; i++)
        if(st[i] == st[niv])
            return false;
    return true;
}
void bkt(int niv)
{
    int i;
    for(i=1; i<=n && niv<=k;i++)
    {
        st[niv] = i;
        if(validare(niv))
        {
            if(niv == k)
            {
                double p = 1.0;
                arj++;
                for(int j=1; j<=niv; j++)
                    p *= v[st[j]];
                g[++l] = p;
            }
            else
            {
                bkt(niv + 1);
            }
        }
    }
}
int main()
{
    fin >> n >> k;
    for(int i=1; i<=n; i++)
        fin >> v[i];
    bkt(1);
    for(int i=1; i<=l; i++)
        prob_alive += g[i] / arj;
    fout<<fixed<<setprecision(6)<<prob_alive;
    fin.close();
    fout.close();
    return 0;
}