Cod sursa(job #1009039)

Utilizator rares96cheseliRares Cheseli rares96cheseli Data 12 octombrie 2013 13:19:47
Problema Dezastru Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");

double p[30], sol, nr1=1.0, nr2=1.0, nrk=1.0;
int st[30], used[30], N, K;

void calcprob()
{
    double prob=1.0;
    for (int i=1; i<=K; ++i)
        prob*=p[st[i]];
    sol+=prob;
}

void back(int vf)
{
    if (vf>K) calcprob();
    else
    {
        for (int i=st[vf-1]+1; i<=N; ++i)
            if (!used[i])
            {
                st[vf]=i; used[i]=1;
                back(vf+1);
                used[i]=0;
            }
    }
}

int main()
{
    f>>N>>K;
    for (int i=1; i<=N; ++i)
        f>>p[i], nr1*=(double)i;

    for (int i=1; i<=N-K; ++i) nr2*=(double)i;
    for (int i=1; i<=K; ++i) nrk*=(double)i;
    back(1); nr1/=nr2;
    g<<fixed<<setprecision(6)<<fabs(sol*nrk/nr1)<<'\n';
    return 0;
}