Pagini recente » Cod sursa (job #3141669) | Cod sursa (job #1127689) | Cod sursa (job #1642354) | Cod sursa (job #61234) | Cod sursa (job #2588959)
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
ifstream in ("dezastru.in");
ofstream out ("dezastru.out");
int64_t n, k;
vector <double> pr (26);
int rz [26];
bool used[26];
double rs = 0;
void subsets()
{
for (int i = 0; i < (1 << n); i++){
int count = 0;
double temp = 1;
for (int j = 0; j < n; j++){
if ((i & (1 << j)) != 0){
temp *= pr[j+1];
//cout << j+1 << " ";
count++;
}
}
if (count == k){
rs+= temp;
//cout << rs << "\n";
//cout << "\n" << temp << "\n";
//cout << "\n";
}
}
}
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;
}
int main()
{
in >> n >> k;
for (int i = 1; i <= n; i++){
in >> pr[i];
}
double fact1 = 1;
double fact2 = 1;
subsets();
/* if (k > n-k){
for (int i = k+1; i <=n; i++)
fact1 *=i;
for (int i = 2; i <= n-k; i++)
fact2 *= i;
}
else{
for (int i = n-k+1; i <=n; i++){
fact1 *=i;
}
for (int i = 2; i <= k; i++){
fact2 *=i;
}
}*/
double fact3 = fact1 / fact2;
out << fixed << setprecision(6) << rs / fastcomb(n,k);
return 0;
}