Cod sursa(job #43559)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 30 martie 2007 11:50:55
Problema Dezastru Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>

#define maxn 30
#define db double

int n,m;
db p[maxn];
db sol,x,fact;

int count(int x)
{
    int rez=0,i;
    
    for (i=0;i<n;i++)
      if ((x&(1<<i))!=0) rez++;
      
    return rez;
}

int main()
{
    freopen("dezastru.in","r",stdin);
    freopen("dezastru.out","w",stdout);
    
    scanf("%d %d ",&n,&m);
    
    int i,j;
    
    for (i=0;i<n;i++) scanf("%lf ",&p[i]);
        
    for (i=0;i<1<<n;i++)
      if (count(i)==m)
      {
        x=1;
        for (j=0;j<n;j++)
          if ((i&(1<<j))!=0) x*=p[j];
        
        sol+=x;
      }   
      
    for (i=1;i<=m;i++) sol*=i;
    for (i=1;i<=n-m;i++) sol*=i;
    for (i=1;i<=n;i++) sol/=i;
            
    printf("%lf\n",sol);
    
    return 0;
}