Cod sursa(job #1367744)

Utilizator muraru_georgeMuraru George Cristian 323CB muraru_george Data 2 martie 2015 03:26:51
Problema Dezastru Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.81 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 + 1 == nr_curent) {
		l++;
		all_prob += probTot;
		return;
	}


	int i;
	for (i = v[nr_curent - 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[i]);
			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;
	float 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);
}