Cod sursa(job #39550)

Utilizator m_dersidanDersidan Mihai m_dersidan Data 26 martie 2007 20:18:02
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
# include <stdio.h>

# define  _fin  "dezastru.in"
# define  _fout "dezastru.out"

# define  maxn  33

double a[maxn][maxn], p[maxn], rez;
int n, k, i, j;
float x;

inline int max(int x, int y) { return x>y?x:y; }
inline int min(int x, int y) { return x<y?x:y; }

int main()
{
	freopen(_fin, "r", stdin);
	freopen(_fout,"w", stdout);
	
	for (scanf("%d%d", &n, &k), i=1; i<=n; i++) scanf("%f", &x), p[i]=x;
	for (i=0; i<=n; i++) a[i][0]=1.0;
	
	for (i=1; i<=n; i++)
		for (j=1; j<=n; j++) a[i][j] = a[i-1][j] + a[i-1][j-1]*p[i];

	for (rez=a[n][k], i=max(k, n-k)+1; i<=n; i++) rez /= i;
	for (i=1; i<=min(k, n-k); i++) rez *= i;

	printf("%.6f\n", rez);
	
	return 0;
}