Pagini recente » Cod sursa (job #3286711) | Cod sursa (job #2683417) | Cod sursa (job #1338897) | Cod sursa (job #2361617) | Cod sursa (job #2504706)
#include <iostream>
#include <fstream>
#include <vector>
#include <iomanip>
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");
int n, k;
vector <double> prob(26);
vector <int> viz(26);
vector <int> v(26);
double answ = 0;
void backCombinari(int nr, int k, vector <int> &viz, vector <int> &v, double &answ)
{
if (nr == k + 1)
{
double rez = 1;
for (int i = 1; i <= k; i++)
rez *= prob[v[i]];
answ += rez;
return;
}
for (int i = 1; i <= n; i++)
{
if (viz[i] == 0)
{
if (v[nr - 1] < i && nr > 1)
{
viz[i] = 1;
v[nr] = i;
backCombinari(nr + 1, k, viz, v, answ);
viz[i] = 0;
}
if (nr == 1)
{
viz[i] = 1;
v[nr] = i;
backCombinari(nr + 1, k, viz, v, answ);
viz[i] = 0;
}
}
}
}
int main()
{
f >> n >> k;
for (int i = 1; i <= n; i++)
f >> prob[i];
backCombinari(1, k, viz, v, answ);
for (int i = 1; i <= n; i++)
{
if (i >= k + 1)
answ = answ / i;
if (i <= n - k)
answ *= i;
}
g << setprecision(6) << answ;
return 0;
}