Pagini recente » Statistici Cristi Cretu (etohirse) | Cod sursa (job #2649174) | Cod sursa (job #2183268) | Cod sursa (job #543978) | Cod sursa (job #2504798)
#include <iostream>
#include <fstream>
using namespace std;
const int MAXN = 27;
int N, K;
double arr[MAXN];
bool used[MAXN];
int64_t fact(int n) {
int64_t ans = 1;
for (int i = 1; i <= n; i++) ans *= i;
return ans;
}
int64_t comb(int64_t n, int64_t k) {
return (fact(n)) / (fact(k) * fact(n - k));
}
int64_t fastcomb(int64_t n, int64_t k) {
int64_t mn = min(k, n - k);
int64_t mx = max(k, n - k);
int64_t ans = 1;
for (int i = mx + 1; i <= n; i++) {
ans *= i;
}
for (int i = 1; i <= mn; i++) {
ans /= i;
}
return ans;
}
double ans = 0;
double coeficient = 0;
void backtrack(int step, int nr, double prod) {
if (step > N) {
if (nr == K) {
// double prod = 1;
// for (int i = 1; i <= N; i++) if (used[i]) prod *= arr[i];
ans += prod / coeficient;
}
return ;
}
used[step] = true;
backtrack(step + 1, nr + 1, prod * arr[step]);
used[step] = false;
backtrack(step + 1, nr, prod);
}
int main() {
ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
fin >> N >> K;
for (int i = 1; i <= N; i++) fin >> arr[i];
coeficient = fastcomb(N, K);
backtrack(1, 0, 1.0);
fout << ans;
return 0;
}