Cod sursa(job #727246)

Utilizator codebreaker24Tivadar Ionut codebreaker24 Data 27 martie 2012 20:15:14
Problema Dezastru Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
# include <iostream>
# include <fstream>
# include <iomanip>
# define Nmax 25
# define Egal(a,b) ((a)==(b)?true:false)
using namespace std;

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

int st[Nmax];
int n, k,nr = 0;
double prob = 0;
double pr[Nmax];



void citire ()
{
    f >> n >> k;
    for (int j=1; j<=n; j++)
    {
        f >> pr[j];
    }
    st[0] = 0;
    f.close();
}

bool valid (int m)
{
        if (st[m-1] >= st[m])
            return false;
        else
            return true;
}

void calcul ()
{
    double pr1 = pr[st[1]];
    for (int j=2; j<=k; j++)
    {
        pr1 = (double) pr1 * pr[st[j]];
    }
    ++nr;
    prob += (double) pr1 * 2;

}

void scriere ()
{
    g << setprecision (6) << prob / (nr * 2) << '\n';
    g.close ();
}

void bktr (int niv)
{
    for (int i=1; i<=n; i++)
    {
        st[niv] = i;
        if (valid(niv))
        {
            if (niv == k)
            calcul();
            else
            bktr(niv+1);
        }
    }
}

int main ()
{
    citire();
    bktr(1);
    scriere();
    return 0;
}