Cod sursa(job #68618)

Utilizator c_sebiSebastian Crisan c_sebi Data 28 iunie 2007 17:57:59
Problema Dezastru Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>

int n, k, nr;
double P=0, p[26];

double afis(int n, int x[]) {
	int i;
	double aux=1;
	nr++;
	for (i=1; i<=n; ++i)
		aux*=p[x[i]];
	return 2*aux;
}

void comb (int n, int k){
	int line, x[30], eSuccesor, eCandidat;
	line=1;
	x[0]=0; x[1]=0;
	while (line>0) {
		do {

			if (x[line] < n-k+line) {
				x[line]++;
				eSuccesor=1;
				eCandidat=1;
			} else eSuccesor=0;
		} while (eSuccesor && !eCandidat);
		if (eSuccesor)
			if (line==k) P+=afis(k, x);
			else x[++line]=x[line-1];
		else --line;
	}
}

int main() {
	int i;
	FILE *f=fopen ("dezastru.in", "r");
	FILE *g=fopen ("dezastru.out", "w");
	fscanf (f, "%d %d\n", &n, &k);
	for (i=1; i<=n; ++i) fscanf (f, "%lf ", &p[i]);
	comb(n, k);
	P/=(2*nr);
	fprintf (g, "%lf\n", P);
	fclose(f);
	fclose(g);
	return 0;
}