Cod sursa(job #201418)

Utilizator piroslPiros Lucian pirosl Data 31 iulie 2008 15:46:49
Problema Combinari Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

double prob[26];
int mask[26];
double c = 0;
int k;
int n;
double valoare;


void aranj(int p)
{
	if(p >= k)
	{
		vector<int> v;
		for(int i=0;i<k;++i)
			v.push_back(mask[i]);
		//do {
			double pr = 1;
			for(int i=0;i<k;++i)
				pr *= prob[v[i]];
			valoare += pr;
			++c;
		//}while(next_permutation(v.begin(), v.end()));
		return;
	}
	int s=(p==0)?0:(mask[p-1]+1);
	for(int i=s;i<n;++i)
	{
		mask[p] = i;
		aranj(p+1);
	}
}

int main(void) 
{
	freopen("dezastru.in", "r", stdin);
	freopen("dezastru.out", "w", stdout);
	cin >> n >> k;
	for(int i=0;i<n;++i) 
	{
		cin >> prob[i];
	}
	aranj(0);
	cout << valoare / c << endl;
	return 0;
}