Cod sursa(job #264771)

Utilizator zlatebogdanZlate Bogdan zlatebogdan Data 22 februarie 2009 18:48:31
Problema Dezastru Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<stdio.h>
int n,k,sol[30],prod=1;
double a[30],sum=0,prodpart=1;
void afis()
{
	for(int i=1;i<=k;++i)
		printf("%lf ",a[sol[i]]);
	printf("\n");
}
void fact()
{
	int x=0,i;
	for(i=k+1;i<=n;++i)
	{
		x++;
		prod*=i;
		if (x<=n-k)
			if(prod%x==0)
				prod=prod/x;
	}
}
double calc()
{
	int i;
	double prodpart=1;
	for(i=1;i<=k;++i)
		prodpart=prodpart*a[sol[i]];
	return prodpart;
}
void back(int x)
{
	int i;
	if (x>k)
	{
		sum+=calc();
//		afis();
		return;
	}
	for(i=sol[x-1]+1;i<=n+x-k;++i)
	{
		sol[x]=i;
//		prodpart*=a[sol[x]];
		back(x+1);
//		prodpart/=a[sol[x]];
	}
}

int main()
{
	int i;
	freopen("dezastru.in","r",stdin);
	freopen("dezastru.out","w",stdout);
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;++i)
		scanf("%lf",&a[i]);
//	for(i=1;i<=n;++i)
//		printf("%lf ",a[i]);
	fact();
//	printf("%d ",prod);
	back(1);
	printf("%lf",sum/prod);
	return 0;
}