Cod sursa(job #732329)

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