Cod sursa(job #92382)

Utilizator MarquiseMarquise Marquise Data 15 octombrie 2007 09:58:41
Problema Dezastru Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
#define NMAX 26
int  st[NMAX], n, m;
double a[NMAX];
long double S;
long long C = 1, D = 1;


void calcul()
{
	int i;
    long double p = 1.0;
    for ( i = 1; i <= m; i++)
    	p *= a[st[i]];
    S += p / C;

}


void back(int k)
{
	int i, lim;
    if ( k == m+1)
    	calcul();
    else
    {
    	lim = n - m + k;
    	for ( i = st[k-1] + 1; i <= lim; i++)
        {
        	st[k] = i;
            back(k+1);
        }
    }
}

int main()
{
	int i, lim;
    freopen("dezastru.in", "r", stdin);
    freopen("dezastru.out", "w", stdout);
    scanf("%d %d", &n, &m);
    for ( i = 1; i <= n; i++)
    	scanf("%lf", &a[i]);
    for ( i = m+1; i <=n; i++)
    	C *= i;
    lim = n - m;
    for ( i = 2; i <=lim; i++)
    	D *= i;
    C = C / D;
    back(1);
    printf("%0.6llf", S);
        
    return 0;
}