Cod sursa(job #39287)

Utilizator ionescu_bogdanIonescu Bogdan-Gabriel ionescu_bogdan Data 26 martie 2007 16:40:34
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define nmax 32

int n,k,i,j,path[nmax],ok;
double p[nmax],pp,sol,nr,pt;

int back(int lvl)
{
	if (lvl==k)
		sol+=(ok==0?pp:pt/pp),nr++;
	else
	{
		for (path[lvl]=(lvl>0?path[lvl-1]+1:0);path[lvl]<n;path[lvl]++)
		{
			pp*=p[path[lvl]];
			back(lvl+1);
			pp/=p[path[lvl]];
		}
	}
}

int main()
{
	freopen("dezastru.in","r",stdin);
	freopen("dezastru.out","w",stdout);

	scanf("%d%d",&n,&k);
	pt=1;
	for (i=0;i<n;i++)
		scanf("%lf",&p[i]),pt*=p[i];
	if (k>n/2)
		k=n-k,ok=1;
	pp=1;
	sol=nr=0;
	back(0);
	printf("%lf\n",sol/nr);

	return 0;
}