Cod sursa(job #491616)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 11 octombrie 2010 21:12:02
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <stdio.h>

int n,k,a[26];
long long c=1;
double p[26],pos=1,s;

inline void back(int x)
{
    int i;
    if (x==k+1)
    {
        s+=pos;
        return;
    }
    for (i=a[x-1]+1;i<=n-k+x;++i)
    {
        pos*=p[i];a[x]=i;
        back(x+1);
        pos/=p[i];
    }
}

int main()
{
    int i;
    freopen("dezastru.in","r",stdin);
    freopen("dezastru.out","w",stdout);
    scanf("%d%d",&n,&k);
    for (i=1;i<=n;++i) scanf("%lf",&p[i]);
    back(1);
    if (n>2*k) k=n-k;
    for (i=k+1;i<=n;++i) c*=i;
    for (i=1;i<=n-k;++i) c/=i;
    double x=(double)(s/c);
    printf("%.6lf",x);
    return 0;
}