Pagini recente » Profil MihaelaCismaru | Cod sursa (job #201801) | Istoria paginii runda/simulare_de_oni_5/clasament | Cod sursa (job #1567340) | Cod sursa (job #2022891)
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdio>
#define NMax 5000
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");
int n, p, foo;
int st[NMax];
long double atac[NMax];
long double prob[NMax], sol;
bool fol[NMax];
void calc()
{
float ans = 1.000000;
for(int i = 1; i <= p; ++i)
ans *= atac[st[i]];
prob[++foo] = ans;
}
void back(int k)
{
for(int i = st[k - 1] + 1; i <= n; ++i)
{
if(!fol[i])
{
fol[i] = true;
st[k] = i;
if(k == p) calc();
else back(k + 1);
fol[i] = false;
}
}
}
int main()
{
f >> n >> p;
for(int i = 1; i <= n; ++i)
f >> atac[i];
f.close();
back(1);
for(int i = 1; i <= foo; ++i)
sol += prob[i];
g << setprecision(6) << sol/foo <<'\n' << fixed;
g.close();
return 0;
}