Cod sursa(job #39283)

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

#define nmax 32

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

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

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

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

	return 0;
}