Pagini recente » Cod sursa (job #1482170) | Cod sursa (job #3291545) | Cod sursa (job #2372002) | Cod sursa (job #2245192) | Cod sursa (job #2504807)
#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) {
ans += prod / coeficient;
}
return ;
}
backtrack(step + 1, nr + 1, prod * arr[step]);
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);
// sans /= (double) (1 << (K - 1));
fout << ans;
return 0;
}