Cod sursa(job #37510)

Utilizator tvladTataranu Vlad tvlad Data 25 martie 2007 10:40:52
Problema Dezastru Scor 20
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasa a 9-a si gimnaziu Marime 0.73 kb
#include <cstdio>

const int N = 25;

int n, k;
long double p[N];
long double rez;
int nr;
int nkf, kf;
int x[N];

void back( int lvl ) {
	for (int i = (lvl > 0) ? x[lvl-1] + 1 : 0; i<n; ++i) {
		x[lvl] = i;
		if (lvl == k - 1) {
			long double t = 1;
			for (int i = 0; i < k; ++i) {
				t *= p[x[i]];
			}
			rez = rez + t * nkf * kf;
			nr += nkf * kf;
		} else {
			back(lvl+1);
		}
	}
}

int main() {
	freopen("dezastru.in","r",stdin);
	freopen("dezastru.out","w",stdout);
	
	scanf("%d %d",&n,&k);
	for (int i = 0; i<n; ++i) {
		scanf("%Lf",&p[i]);
	}
	
	nkf = 1;
	for (int i = 2; i <= n-k; ++i) {
		nkf *= i;
	}
	kf = 1;
	for (int i = 2; i <= k; ++i) {
		kf *= i;
	}
	rez = 0;
	nr = 0;
	back(0);
	
	rez /= nr;
	printf("%Lf\n",rez);
	return 0;
}