Cod sursa(job #2003315)

Utilizator trifangrobertRobert Trifan trifangrobert Data 22 iulie 2017 17:20:34
Problema Dezastru Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iomanip>
#include <fstream>

using namespace std;

double sum = 0;
double v[30];
int n, m, st[30];
bool viz[30];
int nFact = 0;

void Read()
{
	ifstream f("dezastru.in");
	f >> n >> m;
	for (int i = 1;i <= n;i++)
		f >> v[i];
	f.close();
}

//void Calculate()
//{
//	nFact = 1;
//	for (int i = 1;i <= n;i++)
//		nFact *= i;
//}

void Solution()
{
	double s = 1;
	for (int i = 1;i <= m;i++)
		s *= v[st[i]];
	sum += s;
}

void Back(int k)
{
	if (k > m)
	{
		Solution();
		nFact++;
		/*for (int i = 1;i <= m;i++)
			cout << v[st[i]] << " ";
		cout << "\n";*/
		return;
	}
	//nu sunt sigur ca sa face cu combinari, nu ar fi logic
	//asta ar insemna sa luam o singura data doua atacuri consecutive exemplu 1 2 3, 2 1 3
	//si trebuie luate de 2 ori
	for (int i = st[k - 1] + 1;i <= n;i++)
	{
		st[k] = i;
		Back(k + 1);
	}
}

void Write()
{
	ofstream g("dezastru.out");
	g << setprecision(6) << sum / nFact << "\n";
	g.close();
}

int main()
{
	Read();
	Back(1);
	Write();
	return 0;
}