Cod sursa(job #2050106)

Utilizator CezarTDTodirisca Cezar CezarTD Data 27 octombrie 2017 22:39:14
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
int n,k,sol[26],nprim;
double num[26],probabilitate;
long long fact=1,fact2=1,kfact=1;
void calcul()
{
    double prob=1;
    for(int i=1;i<=k;i++)prob*=num[sol[i]];
    prob*=kfact;
    probabilitate+=prob;
}

void BK(int nr)
{
    for(int i=sol[nr-1]+1;i<=n-k+nr;i++)
    {
        sol[nr]=i;
        if(nr==k)
        {
            calcul();
        }else BK(nr+1);
    }
}

int main()
{
    fin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        fin>>num[i];
    }
    nprim=n-k;
    for(int i=1;i<=k;i++)kfact*=i;
    for(int i=n-nprim+1;i<=n;i++)fact*=i;
    for(int i=1;i<=nprim;i++)fact2*=i;
    fact/=fact2;
    BK(1);
    k++;
    for(k;k<=n;k++)kfact*=k;
    fout<<fixed<<setprecision(6)<<probabilitate/kfact;
    return 0;
}