Cod sursa(job #3290436)

Utilizator iccjocIoan CHELARU iccjoc Data 30 martie 2025 18:31:11
Problema Dezastru Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;

int n, k;
long double ans = 0;
long long nFact;
long long kFact;
long long nkFact;
vector<int> vis;
vector<long double> v;

void calc(int i = 0, int pj = -1)
{
	if(i == k)
	{
		long double pd = 1;
		for(int j = 0; j < n; j++)
		{
			if(vis[j])
				pd *= v[j];
		}
		ans += (pd * nkFact * kFact) / nFact;
		return;
	}
	for(int j = pj + 1; j < n; j++)
	{
		if(!vis[j])
		{
			vis[j] = true;
			calc(i+1, j);
			vis[j] = false;
		}
	}
}

int main()
{
	freopen("dezastru.in", "r", stdin);
	freopen("dezastru.out", "w", stdout);
	cin.tie(nullptr)->sync_with_stdio(false);
	cin >> n >> k;
	vis.resize(n);
	for(int i = 0; i < n; i++)
	{
		long double x;
		cin >> x;
		v.push_back(x);
	}
	nFact = 1;
	nkFact = 1;
	kFact = 1;
	for(long long i = 1; i <= n; i++)
	{
		nFact *= i;
	}
	for(long long i = 1; i <= n - k; i++)
	{
		nkFact *= i;
	}
	for(long long i = 1; i <= k; i++)
	{
		kFact *= i;
	}
	calc();
	cout << fixed << setprecision(6) << ans;
}