Cod sursa(job #1367737)

Utilizator muraru_georgeMuraru George Cristian 323CB muraru_george Data 2 martie 2015 02:36:59
Problema Dezastru Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<stdio.h>

int v[26], checked[26], n, k, l = 0;
float p[26], all_prob;

# define MIN(a, b) ((a > b)? b : a)

void back(int nr_curent)
{
	if ( MIN(k, n) + 1 == nr_curent) {
		int i;
		float prob = 1;
		l++;
		for (i = 1; i <= k; i++) 
			prob *= p[v[i]];
		all_prob += prob;
		return;
	}


	int i;
	for (i = 1; i <= n ; i++) {
		if (!checked[i]) {
			checked[i] = 1;
			v[nr_curent] = i;
			back(nr_curent + 1);
			checked[i] = 0;
		}
	}
}
	

int main(void)
{
	FILE *f_in = freopen("dezastru.in", "rt", stdin);
	FILE *f_out = freopen("dezastru.out", "wt", stdout);

	scanf("%d %d\n", &n, &k);
	int i;
	for (i = 1; i <= n; i++)
		scanf("%f", &p[i]);

	back(1);
	printf("%f\n", all_prob / l);
}