Pagini recente » Rating Marinescu Ioana (ioana_marinescu) | Cod sursa (job #1289310) | Cod sursa (job #1168477) | Cod sursa (job #641633) | Cod sursa (job #1009039)
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");
double p[30], sol, nr1=1.0, nr2=1.0, nrk=1.0;
int st[30], used[30], N, K;
void calcprob()
{
double prob=1.0;
for (int i=1; i<=K; ++i)
prob*=p[st[i]];
sol+=prob;
}
void back(int vf)
{
if (vf>K) calcprob();
else
{
for (int i=st[vf-1]+1; i<=N; ++i)
if (!used[i])
{
st[vf]=i; used[i]=1;
back(vf+1);
used[i]=0;
}
}
}
int main()
{
f>>N>>K;
for (int i=1; i<=N; ++i)
f>>p[i], nr1*=(double)i;
for (int i=1; i<=N-K; ++i) nr2*=(double)i;
for (int i=1; i<=K; ++i) nrk*=(double)i;
back(1); nr1/=nr2;
g<<fixed<<setprecision(6)<<fabs(sol*nrk/nr1)<<'\n';
return 0;
}