Cod sursa(job #1721107)

Utilizator Mihai7Gheoace Mihai Mihai7 Data 24 iunie 2016 15:13:24
Problema Dezastru Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
using namespace std;
short n,k,st[26],niv,cnt,i;
double perm[27];
void permutari()
{
    perm[0]=1;
    for(i=1;i<=25;++i)
        perm[i]=perm[i-1]*i;

}
double v,val[26];
inline void init()
{
    st[niv]=st[niv-1];
}
inline bool succ()
{
    if(st[niv]<n)
    {++st[niv];return 1;}
    return 0;
}
void afis()
{
    double p=1;cnt+=perm[k];
    for(i=1;i<=k;++i)
        p*=val[st[i]];
    v+=p*perm[k];
}
void back()
{
    niv=1;init();bool s;
    while(niv)
    {
        s=succ();
        if(s)
            if(niv==k)
                afis();
                else ++niv,init();
           else --niv;
    }
}
int main()
{
    FILE *f=freopen("dezastru.in","r",stdin),
    *g=freopen("dezastru.out","w",stdout);

    scanf("%hd %hd",&n,&k);
    for(i=1;i<=n;++i)
        scanf("%lf",&val[i]);
    permutari();
    back();
    v=v/cnt;
    printf("%f",double(v));
}