Cod sursa(job #1300521)

Utilizator delia_99Delia Draghici delia_99 Data 24 decembrie 2014 15:40:43
Problema Dezastru Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>

using namespace std;
int n,k,sol[30],i,l,p;
float a[30],nr;

void calc(float &nr)
{
    int j;
    float x=1;
    for(j=1; j<=k; ++j)
        x*=a[sol[j]];
    nr+=x;
    return;
}
bool ok(int l)
{
    int j;
    bool ok2=true;
    for(j=1; j<l; ++j)
        if(sol[j]==sol[l])
        {
            ok2=false;
            break;
        }
    return ok2;

}

void back(int l)
{
    int i;
    if(l>k)
        {calc(nr);}
    else
    {
        for(i=1; i<=n; ++i)
        {
            sol[l]=i;
            if(ok(l))
             back(l+1);
        }
    }
    return;

}
int main()
{
    freopen("dezastru.in","r",stdin);
    freopen("dezastru.out","w",stdout);
    scanf("%d %d\n",&n,&k);
    for(i=1; i<=n; ++i)
        scanf("%f",&a[i]);
    nr=0;
    p=1;
    for(i=2;i<=n;++i) p*=i;
    for(i=2;i<=n-k;++i) p/=i;
    back(1);
    printf("%.6f",nr/p);

    return 0;
}