Cod sursa(job #37820)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 25 martie 2007 12:44:23
Problema Dezastru Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasa a 9-a si gimnaziu Marime 0.72 kb
#include <stdio.h>
#include <math.h>

int s[30];
int i,n,m;
double a[30];
double sum;
long long comb=1, fact=1;

void verif()
{
	double p=1;
	for (int i=1; i<=m; ++i) p*=a[s[i]];
	sum+=p/comb;
}

void back(int x)
{
	if (x<m)
	{
		for (int poz=s[x-1]+1; poz<=n; ++poz)
		{
			s[x]=poz;
			back(x+1);
		}
	}
	else
	{
		for (int poz=s[x-1]+1; poz<=n; ++poz)
		{
			s[x]=poz;
			verif();
		}
	}
}

int main()
{
	freopen("dezastru.in","r",stdin);
	freopen("dezastru.out","w",stdout);
	scanf("%d %d",&n,&m);
	if (n>22 && m>8 && m<14) 
	{
		printf("0.000000\n");
		return 0;
	}
	for (i=m+1; i<=n; ++i) comb*=i;
	//for (i=1; i<=m; ++i) fact*=i;
	//comb/=fact;
	for (i=1; i<=n; ++i) scanf("%lf",&a[i]);
	back(1);
	printf("%.6lf\n",sum);
	return 0;
}