Cod sursa(job #1367741)

Utilizator muraru_georgeMuraru George Cristian 323CB muraru_george Data 2 martie 2015 03:11:49
Problema Dezastru Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>

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

void back(int nr_curent, int pos, float probTot)
{

	
	if (k == nr_curent) {
		l++;
/*		int i;
		float prob = 1;
		l++;
		if (pos) {
			for (i = 1; i <= n; i++)
				if (!checked[i])
					prob *= p[i];
		}
		else {
			for (i = 1; i <= k; i++) 
				prob *= p[v[i]];
		}
*/
		all_prob = probTot;
		return;
	}


	int i;
	for (i = 1; i <= n ; i++) {
		if (!checked[i]) {
			checked[i] = 1;
			v[nr_curent] = i;
			if (pos)
				back(nr_curent + 1, pos, probTot/p[i]);
			else
				back(nr_curent + 1, pos, probTot * p[v[nr_curent]]);
			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;
	int totalProb = 1;
	for (i = 1; i <= n; i++) {
		scanf("%f", &p[i]);
		totalProb *= p[i];
	}
	
	if (k > n / 2 + 1) {
		k = n - k;
		back(1, 1, totalProb);
	} else
		back(1, 0, 1);
	printf("%f\n", all_prob / l);
}