Cod sursa(job #1721111)

Utilizator Mihai7Gheoace Mihai Mihai7 Data 24 iunie 2016 15:19:38
Problema Dezastru Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
using namespace std;
short n,k,st[26],niv,cnt,i;
double perm[27], v,val[26];
inline bool succ()
{
    if(st[niv]<n)
    {++st[niv];return 1;}
    return 0;
}
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]);
    perm[0]=1;
    for(i=1;i<=k;++i)
        perm[i]=perm[i-1]*i;
    niv=1;st[niv]=st[niv-1];;
    bool s;
    while(niv)
    {
        s=succ();
        if(s)
            if(niv==k)
                {
                    double p=1;cnt+=perm[k];
                    for(i=1;i<=k;++i)
                        p*=val[st[i]];
                    v+=p*perm[k];
                }
                else ++niv,st[niv]=st[niv-1];
           else --niv;
    }
    v=v/cnt;
    printf("%f",v);
}