Cod sursa(job #2068633)

Utilizator sebi110Ciobanu Sebastian sebi110 Data 18 noiembrie 2017 10:04:41
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>

using namespace std;
ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
int viz[30],v[30],nrcomb;
int n,m;
double prob,a[30];
double calcprob()
{
    double p=1;
    for(int i=1;i<=n;i++)
    {
        if(viz[i]==1)
            p=p*a[i];
    }
    return p;
}
void BKT(int k)
{
    if(k>m)
    {
        prob=prob+calcprob()/nrcomb;
        return ;
    }
    for(int i=1;i<=n;i++)
    {
        if(viz[i]==0)
        {
            viz[i]=1;
            v[k]=i;
            BKT(k+1);
            viz[i]=0;
        }
    }
}
long long calccomb(int n,int k)
{
    long long nr=1;
    long double nrr;
    if(n-k<k)
        k=n-k;
    for(int i=n-k;i<=n;i++)
        nr*=i;
    nrr=double(nr/k);
    for(int i=2;i<k;i++)
        nrr/=i;
    return nrr;
}
int main()
{
    fin>>n>>m;
    nrcomb=calccomb(n,m);
    for(int i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    BKT(1);
    fout<<prob;
    return 0;
}