Cod sursa(job #2462130)

Utilizator 1chiriacOctavian Neculau 1chiriac Data 26 septembrie 2019 20:02:37
Problema Dezastru Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("dezastru.in");
ofstream fout ("dezastru.out");
int n,m,v[30],ii;double p[30],sumap,produs,factorial;
int succesor (int k)
{
	if(k<=m && v[k]<n)
	{
		v[k]++;
		return 1;
	}
	return 0;
}
int valid (int k)
{
	return 1;
}
int solutie (int k)
{
	if(k==m)
		return 1;
	return 0;
}
void calculare (int k)
{
	produs=1.0;
	for(ii=1;ii<=k;++ii)
		produs=produs*p[v[ii]];
	sumap+=produs;
}
void backt ()
{
	int i,k;
	k=1;v[k]=0;
	while(k>0)
	{
		i=0;
		while(i==0 && succesor(k))
			if(valid(k))
				i=1;
		if(i==0)
			k--;
		else
		{
			if(solutie(k))
				calculare(k);
			else
				k++,v[k]=v[k-1];
		}
	}
}
int main ()
{
	int i;
	fin>>n>>m;
	for(i=1;i<=n;++i)
		fin>>p[i];
	factorial=1;
	for(i=m+1;i<=n;++i)
		factorial=factorial*i;
	backt();
	fout<<setprecision(5)<<sumap/factorial;
	return 0;
}