Cod sursa(job #209244)

Utilizator pitbullpitbulll pitbull Data 21 septembrie 2008 15:58:49
Problema Dezastru Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.86 kb
# include <stdio.h>
# define IN_FILE "dezastru.in"
# define OUT_FILE "dezastru.out"
# define NMAX 27

int N,K;
FILE *f;
int X[NMAX];
double p[NMAX];
double sum=0.0f;

void writeSol(){
	int i;
	double aux=1.0f;
	for (i=0;i<K;i++)
		aux*=p[X[i]-1];
	sum+=aux;
}

int cond(int k){
	int i;
	for (i=0;i<k;i++)
		if(X[i]==X[k])
			return 1;
	return 0;
}

void back(int k){
	if (k==K)
		writeSol();
	else{
		int i;
		for (i=1;i<=N;i++){
			X[k]=i;
			if(cond(k)==0)
				back(k+1);
		}
	}
}

int main (){
		f=fopen(IN_FILE,"rt");
		fscanf(f,"%d %d",&N,&K);
		int i;
		for (i=0;i<N;i++)
				fscanf(f,"%lf",&p[i]);
		
		fclose(f);
		
		back(0);
		
		long long int prod=1;
		for (i=2;i<=N;i++)
			prod*=i;
		
		f=fopen(OUT_FILE,"wt");

		double res=(double)(sum/prod);
		fprintf(f,"%.6lf",res);
		fclose(f);
		
		return 0;
}