Cod sursa(job #726867)

Utilizator codebreaker24Tivadar Ionut codebreaker24 Data 27 martie 2012 16:20:24
Problema Dezastru Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 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;
float prob = 0;
float pr[Nmax];



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

bool valid (int m)
{
    for(int j=1; j<m;j++)
    {
        if (st[j] >= st[m])
        return false;
    }
    return true;
}

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

    prob += (float) pr1 / n;

}

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

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

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