Cod sursa(job #2207785)

Utilizator fetti_danutzdezactivat fetti_danutz Data 26 mai 2018 19:48:58
Problema Dezastru Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;

#define DIM 30

ifstream fin("dezastru.in");
ofstream fout("dezastru.out");


int N, K;
double p[DIM];
bool s[DIM];

double Sol = 0.0;
double aux = 1.0;
long long int Nr_comb = 1;
long long int Nr_aranj = 1;
long long int Nr = 1;
int oldIndex;
int index;

void Read();
double Fact(int x);
void Back(int k);
void Write(int k);

int main()
{
	Read();
	
	for (int i = N - K + 1; i <= N; ++i)
		Nr_aranj *= i;
	
	Nr_comb = Nr_aranj;
	
	for (int i = 1; i <= K; ++i)
		Nr_comb /= i;

	Nr = Nr_aranj / Nr_comb;

	Back(1);

	fout << Sol;

	fin.close();
	fout.close();
	return 0;
}

void Back(int k)
{

	if (k > K)
	{
		Sol += (aux * (double)Nr) / (double)Nr_aranj;
		return;
	}

	oldIndex = index;
	for (int i = index + 1; i <= N; ++i)
		if (!s[i])
		{

			index = i;
			s[i] = true;
			aux *= p[i];
			Back(k + 1);
			aux /= p[i];
			s[i] = false;
		}
	index = oldIndex;
}

void Read()
{
	fin >> N >> K;
	for (int i = 1; i <= N; ++i)
		fin >> p[i];
}