Cod sursa(job #37438)

Utilizator ZweisteinAdrian VELICU Zweistein Data 25 martie 2007 09:38:58
Problema Dezastru Scor 50
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasa a 9-a si gimnaziu Marime 0.92 kb
#include <stdio.h>
#include <memory.h>
#include <cassert>
int n,k;
long double prob[28];

int sol[28];
char uzed[28];

long double totprob;
long totcount;

void woosh(int ou) {
	assert(ou<=k+1);
	if (ou==k+1) {
		/*
		for (int i=1; i<=k; i++) printf("%Lf ",prob[sol[i]]);
		printf("\n");
		*/
		long double localprob=1;
		for (int i=1; i<=k; i++) localprob*=prob[sol[i]];
	       	// printf("Local probability is %Lf\n",localprob);
		totprob+=localprob;
		totcount++;	
	} else {
		for (int i=1; i<=n; i++) if (!uzed[i]) {
			uzed[i]=1;
			sol[ou]=i;
			woosh(ou+1);
			sol[ou]=0;
			uzed[i]=0;
		};
	};
};
int main (void) {
	FILE * fi = fopen("dezastru.in","rt");
	FILE * fo = fopen("dezastru.out","wt");
	fscanf(fi,"%d %d",&n,&k);
	for (int i=1; i<=n; i++) fscanf(fi,"%Lf",&prob[i]);
	for (int i=1; i<=n; i++) sol[i]=i;
	memset(uzed,0,sizeof(uzed));
	woosh(1);
	fprintf(fo,"%Lf\n",totprob/totcount);
	fclose(fi); fclose(fo);
	return 0;
};