Cod sursa(job #304985)

Utilizator dya_ndmNanuti Diana-Maria dya_ndm Data 15 aprilie 2009 22:04:33
Problema Dezastru Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>
int n,k,j,l,st[26];
long long num=1;
float s,pr,p[26];

void numar()
{
int i;
for(i=1;i<=k;++i)
   num=num*(n-k+i);
}

int succesor()
{
if(st[j]<n)
  {
  st[j]++;
  return 1;
  }
return 0;
}

void solve()
{
int i;
pr=1;
for(i=1;i<=k;++i)
   pr=pr*p[st[i]];
s+=pr;
}

void backt()
{
int as;
j=1;
while(j>0)
     {
     as=succesor();
     if(as)
       if(j==k)
         {solve();}
       else
         {++j;
         st[j]=st[j-1]+1;
         solve();
         }
      else
         --j;
     }
}

int main()
{
freopen("dezastru.in","r",stdin);
freopen("dezastru.out","w",stdout);

scanf("%d%d",&n,&k);

int i;

pr=1;
for(i=1;i<=n;++i)
   {
   scanf("%f",&p[i]);
   if(i<=k)
     pr=pr*p[i];
   }

if(n==k)
   printf("%.6f\n",pr);  
else
   {
   backt();
   }

numar();
num=num/2;
s=s/num;
printf("%.6f\n",s);
return 0;
}