Pagini recente » Cod sursa (job #2957147) | Cod sursa (job #989140)
Cod sursa(job #989140)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
long long int i,j,aranjamente=1,n,k,curk;
int bin[50];
long double rasp,prod=1,aux,dou[50];
long long int comb[50];
void citire()
{
fin>>n>>k;
for(i=0;i<n;++i)
{fin>>dou[i];prod*=dou[i];}
}
void push()
{
for (int i=0;i<curk;++i)
++bin[i];
}
void aranj()
{ int curent=1,mimic=0,mimic2=0;
comb[0]=0;
comb[1]=1;
for (i=2;i<=n+1;++i)
{curent=i;
for (j=1;j<=curent;++j)
{
mimic=comb[j];
comb[j]=mimic+mimic2;
mimic2=mimic;
}
}
aranjamente=comb[curk+1];
}
int main()
{
citire();
curk=n-k>k?k:n-k;
push();aranj();
if (k==n)
{
fout<<prod;
return 0;
}
if (curk==k)
{
aux=1;
for(i=0;i<n;++i)
if (bin[i])
aux*=dou[i];
rasp+=aux;
}
else
{
aux=prod;
for(i=0;i<n;++i)
if (bin[i])
aux/=dou[i];
rasp+=aux;
}
while(prev_permutation(bin,bin+n))
{
if (curk==k)
{
aux=1;
for(i=0;i<n;++i)
if (bin[i])
aux*=dou[i];
rasp+=aux;
}
else
{
aux=prod;
for(i=0;i<n;++i)
if (bin[i])
aux/=dou[i];
rasp+=aux;
}
}
fout<<rasp/aranjamente<<'\n';
return 0;
}