Pagini recente » Cod sursa (job #3191041) | Istoria paginii runda/winter2020 | Cod sursa (job #145856) | Diferente pentru implica-te/arhiva-educationala intre reviziile 223 si 202 | Cod sursa (job #3290444)
#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;
}