Cod sursa(job #489906)

Utilizator claudiumihailClaudiu Mihail claudiumihail Data 3 octombrie 2010 23:28:10
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<fstream>
#include<iostream>
#include<iomanip>
using namespace std;

#define MAXN 26

//unsigned long long fact=1;
double probs[MAXN];

double total;

void comb(int *const v, const int n, const int k, const int cur)
{
	if(cur==k)
	{
		double prod=1;
		for(int i=1; i<=k; ++i)
		{
			//cout<<v[i]<<" ";
			prod*=probs[v[i]];
		}
		//cout<<"\n";
		total+=prod;
	}
	else
	{
		for(int i=v[cur]; i<n; ++i)
		{
			v[cur+1]=i+1;
			comb(v,n,k,cur+1);
		}
	}
}

int main()
{
	int n,k;//,v[MAXN];
	//double mat[MAXN][MAXN];
	fstream fin("dezastru.in", fstream::in);
	fstream fout("dezastru.out", fstream::out);
	
	fin>>n>>k;
	
	for(int i=1; i<=n; ++i)
	{
		fin>>probs[i];
		//cout<<probs[i]<<" ";
	}
	//cout<<endl;
	
	/*for(int i=1;i<=25; ++i)
		fact*=i;
	cout<<fact<<endl;*/
	
	/*for(int i=1; i<=k; ++i)
	{
		v[1]=i;
		comb(v,n,k,1);
	}*/
	
	for(int i=1; i<=n; ++i)
	{
		double prod=0;
		for(int j=1; j<=k+1; ++j)
		{
			if(i!=j)
				prod+=(probs[i]*probs[j]);
		}
		total+=prod;
	}
	fout<<setiosflags(fstream::fixed)<<setprecision(6)<<total/(n*k)<<endl;
	
	fin.close();
	fout.close();
	return 0;
}