Cod sursa(job #761680)

Utilizator gener.omerGener Omer gener.omer Data 26 iunie 2012 23:49:37
Problema Dezastru Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <cstdio>
#include <cstdlib>

using namespace std;

#define NMAX 32

int v[NMAX];
float P[NMAX];
int N, K;

double s = 0;
int n = 0;

void print(){
	for(int i = 1; i < N; ++i)
		for(int j = i+1; j <= N; ++j)
			if(v[i] == v[j])
				return;

	double p  = 1;
	for(int i = 1; i <= K; ++i)
			//printf("%d ", v[i]);
			p *= P[v[i]];
	s += p;
	++n;
}

void back(int i){	
	if(i > N){
		print();
		return;
	}

	for(int j = 1; j <= N; ++j){
		v[i] = j;
		back(i+1);
	}
}	

int main(){
	freopen( "dezastru.in",  "rt",  stdin );
	freopen("dezastru.out",  "wt", stdout  );

	scanf("%d %d", &N, &K);
	
	for(int i = 1; i <= N; ++i)
		scanf("%f", &P[i]);
		
	back(1);
	
	printf("%f", s/n);
	
	return 0;
}