Pagini recente » Cod sursa (job #73749) | Cod sursa (job #334226) | Cod sursa (job #2780564) | Cod sursa (job #1777449) | Cod sursa (job #2765765)
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;
int n, k;
double a[26];
void read() {
int i;
ifstream f("dezastru.in");
f >> n >> k;
for (i = 1; i <= n; i++)
f >> a[i];
f.close();
}
double rez, C, prod = 1;
int comb[26];
void back(int niv) {
for (int i = comb[niv - 1] + 1; i <= n - k + niv; i++) {
comb[niv] = i;
prod *= a[i];
if (niv < k)
back(niv + 1);
else rez += prod * C;
prod /= a[i];
}
}
void solve() {
int nr1, nr2, i;
long long fact1, fact2;
nr1 = k, nr2 = n - k;
if (nr1 < nr2)
swap(nr1, nr2);
fact2 = 1;
for (i = 1; i <= nr2; i++)
fact2 *= i;
fact1 = 1;
for (i = n; i > nr1; i--)
fact1 *= i;
C = fact2 * 1.0 / fact1;
back(1);
}
void output() {
ofstream g("dezastru.out");
g << setprecision(7) << fixed << rez;
g.close();
}
int main() {
read();
solve();
output();
return 0;
}