Pagini recente » Cod sursa (job #823476) | Cod sursa (job #2368773) | Cod sursa (job #2140243) | Cod sursa (job #497198) | Cod sursa (job #1141798)
/// Craciun Catalin
/// Dezastru
/// www.infoarena.ro/problema/dezastru
#include <fstream>
#include <iostream>
#include <iomanip>
#define NMax 30
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");
short n,k;
float A[NMax];
bool uz[NMax];
int C[NMax];
int numitor;
float rez=0;
int fact(int x)
{
int p=1;
for (int i=2;i<=x;i++)
p*=i;
return p;
}
void foundPermutation()
{
float temp=1;
for (int i=1;i<=k;i++)
temp*=A[C[i]];
temp/=numitor;
rez+=temp;
}
void found()
{
float temp=1;
for (int i=1;i<=k;i++)
temp*=A[C[i]];
temp*=k;
temp/=numitor;
rez+=temp;
}
void perm(int p)
{
if (p==k+1)
foundPermutation();
else
{
for (int i=1;i<=n;i++)
if (!uz[i])
{
uz[i]=true;
C[p]=i;
perm(p+1);
uz[i]=false;
}
}
}
void comb(int p)
{
if (p==k+1)
found();
else
for (int i=C[p-1]+1;i<=n;i++)
{
C[p]=i;
comb(p+1);
}
}
int main()
{
f>>n>>k;
numitor=fact(n);
for (short i=1;i<=n;i++)
f>>A[i];
f.close();
// comb(1);
perm(1);
g<<fixed<<setprecision(6)<<rez<<'\n';
g.close();
return 0;
}