Cod sursa(job #350267)

Utilizator bogdanacmDrutu Bogdan bogdanacm Data 23 septembrie 2009 10:39:54
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include <cstring>
#include <vector>

using namespace std;

#define NMAX 105

int st[NMAX],N,K,var;
double sum=0,v[NMAX],prod=1,tot=1;

void solve(double t)
{
	t = (var == 1 ? t : tot/t) / prod;
	sum += t;
}


void back(int t,double re)
{
	int i;
	if (t == K) 
	{
		solve(re);
		return;
	}
	for (i = (t == 0 ? 0 : st[t-1] + 1); i < N;i++)
		st[t]=i,back(t+1,re*v[i]);
}

int main()
{
	int i;
	freopen("dezastru.in", "rt", stdin);
	freopen("dezastru.out", "wt", stdout);

	scanf("%d %d",&N,&K);

	for (i=K+1;i<=N;i++)
		prod *= (double)i;

	for (i=1;i<=N-K;i++)
		prod /= (double)i;

	var = 1;
	if (K > N - K)
	{
		K = N-K;
		var = 2;
	}

	for (i=0;i<N;i++)
	{
		scanf("%lf",&v[i]);
		tot *=v[i];
	}

	back(0,1);

	printf("%.6lf\n",sum);
	return 0;
}