Cod sursa(job #490542)

Utilizator claudiumihailClaudiu Mihail claudiumihail Data 6 octombrie 2010 19:41:41
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
#include<iostream>
#include<iomanip>
using namespace std;

#define MAXN 26
typedef unsigned long long uint64;

int n,k;
double probs[MAXN];

inline int maximum(const int a, const int b)
{
	return a>b?a:b;
}

inline int minimum(const int a, const int b)
{
	return a<b?a:b;
}

int main()
{
	double mat[MAXN][MAXN]={{}};
	fstream fin("dezastru.in", fstream::in);
	fstream fout("dezastru.out", fstream::out);
	
	fin>>n>>k;
	uint64 Cnk=1,prod=1;
	for(int i=maximum(n-k,k)+1; i<=n; ++i)
		Cnk*=i;
	for(int i=1; i<=minimum(n-k,k); ++i)
		prod*=i;
	Cnk/=prod;
	
	for(int i=1; i<=n; ++i)
		fin>>probs[i];

	for(int i=0; i<=n; ++i)
		mat[i][0]=1;
	for(int i=1; i<=n; ++i)
		for(int j=1; j<=n; j++)
			mat[i][j]=mat[i-1][j]+mat[i-1][j-1]*probs[i];

	fout<<setiosflags(fstream::fixed)<<setprecision(6)<<mat[n][k]/((double)Cnk)<<" \n";

	fin.close();
	fout.close();
	return 0;
}