Pagini recente » Cod sursa (job #822463) | Cod sursa (job #2919305) | Cod sursa (job #2773231) | Cod sursa (job #2915762) | Cod sursa (job #2567361)
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
double prob[29];
int fact[13];
int n,c;
int viz[29];
double total;
int sol[29];
void Add(int k)
{
double prod = 1;
for(int i = 1; i<=k; ++i)
{
prod = 1.0*prod*(prob[sol[i]]);
}
total += prod;
}
bool Valid (int k)
{
for(int i = 2; i<=k; ++i)
if(sol[i] < sol[i-1])
return false;
return true;
}
void Back(int k)
{
for(int i = k; i<=n; ++i)
if(viz[i] == 0)
{
viz[i] = 1;
sol[k] = i;
if(Valid(k))
{
if( k == c )
Add(k);
else Back(k+1);
}
viz[i] = 0;
}
}
void Calc()
{
int i;
double sum = 1;
for(i = c+1; i<=n; ++i)
{
sum *= 1.0*total/i;
}
fout<<sum<<fixed<<setprecision(6);
}
void Read()
{
fin>>n>>c;
for(int i = 1; i<=n; ++i)
fin>>prob[i];
for(int i = 2; i<=12; ++i)
fact[i] = fact[i-1] * 2;
}
void Do()
{
Back(1);
Calc();
}
int main()
{
Read();
Do();
return 0;
}