Cod sursa(job #3290444)

Utilizator iccjocIoan CHELARU iccjoc Data 30 martie 2025 18:48:40
Problema Dezastru Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 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, long double x = 1)
{
	if(i == k)
	{
		ans += (x * nkFact * kFact);
		return;
	}
	for(int j = pj + 1; j < n; j++)
	{
		if(!vis[j])
		{
			calc(i+1, j, x * v[j]);
		}
	}
}

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(8) << ans / nFact;
}