Cod sursa(job #80942)

Utilizator peanutzAndrei Homorodean peanutz Data 30 august 2007 18:53:13
Problema Dezastru Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
#include <math.h>

#define NMAX 30

double p[NMAX];
double a[NMAX][NMAX];
int n, k;

void read()
{
	scanf("%d%d", &n, &k);
	for(int i = 1; i <= n; ++i)
		scanf("%lf", &p[i]);
}

void dinamic()
{
	int i, j;
	for(i = 0; i <= n+1; ++i)
		a[i][0] = 1;
	a[1][1] = p[1];

	for(i = 2; i <= n; ++i)
		for(j = 1; j <= i && j <= k; ++j)
			a[i][j] = a[i-1][j] + a[i-1][j-1]*p[i];
}

long long int f(int x)
{
    if(!x)
      return 1;
    if(x <= 2)
	return x;
    return x * f(x-1);
}

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

	read();

	dinamic();

	a[n][k] = (double)a[n][k] / ((long long)f(n) / f(n-k) / f(k)) ;
	a[n][k] = floor(a[n][k]* 1000000) / 1000000;

	printf("%.6lf\n", a[n][k]);
    //printf("%lld\n",  f(n) / f(n-k) / f(k) );
    /*for(int i = 1; i <= n; ++i)
    {
     for(int j = 1; j <= n; ++j)
	printf("%llf ", a[i][j]);
     printf("\n");
    } */

	return 0;
}