Cod sursa(job #449233)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 5 mai 2010 22:29:02
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<cstdio>

using namespace std;

int n,k,v[26];
double a[26];
double s,prob=1;
long long kf=1,nkf=1;

void read();
void solve(int p);
void write();
void calc(int A[]);

int main()
{
	freopen("dezastru.in","r",stdin);
	freopen("dezastru.out","w",stdout);
	read();
	solve(1);
	write();
	return 0;
} 

void read()
{
	int i;
	double x;
	double a2=1,b;
	scanf("%d %d\n",&n,&k);
	for (i=1;i<=n;++i)
	{
		scanf("%lf",&x);
		a[i]=x;
	}
	for (i=1;i<=n;++i)
	{
		b=i;
		prob*=a2/b;
	}
	for (i=1;i<=k;++i)
		kf*=i;
	for (i=1;i<=n-k+1;++i)
		nkf*=1;
}

void solve(int p)
{
	int i;
	for (i=v[p-1]+1;i<=n;++i)
	{
		v[p]=i;
		if (p==k)
			calc(v);
		else 
			solve(p+1);
	}
}

void calc(int A[])
{
	int i;
	double z=1;
	for (i=1;i<=k;++i)
		z*=a[A[i]];
	s+=z*prob*nkf*kf;
}

void write()
{
	printf("%.8lf",s);
}