Cod sursa(job #732352)

Utilizator iulishorIulian Popescu iulishor Data 10 aprilie 2012 12:10:18
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<cstdio>
using namespace std;
int n,k,sol[26],uz[26];
double d[26],suma;
double fact[26];
inline void citire()
{
	freopen("dezastru.in","r",stdin);
	scanf("%d%d",&n,&k);
	fact[0]=1;
	for(int i=1;i<=n;++i)
		scanf("%lf",&d[i]),fact[i]=fact[i-1]*i;
}
inline void afisare()
{
	freopen("dezastru.out","w",stdout);
	printf("%.6lf\n",suma/fact[n]);
}
inline void aduna()
{
	double prod=1;
	for(int i=1;i<=k;++i)
		prod*=d[ sol[i] ];
	suma+=(2*prod);
}
inline void back(int kk)
{
	if(kk==k+1)
		aduna();
	else
		for(int i=sol[kk-1]+1;i<=n;++i)
			if(!uz[i])
			{
				sol[kk]=i;
				uz[i]=1;
				back(kk+1);
				uz[i]=0;
			}
}
int main()
{
	citire();
	back(1);
	afisare();
}