Pagini recente » Cod sursa (job #58245) | Cod sursa (job #319563) | Cod sursa (job #1899081) | Cod sursa (job #65835) | Cod sursa (job #1742615)
#include <fstream>
#include <iomanip>
#define NMAX 30
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");
int i, n, v[NMAX], level = 1, m, fr[NMAX], nrtot = 0;
double cote[NMAX], ans = 0;
double compute()
{
double p = 1;
for (int i = 1; i <= m; ++ i)
p *= cote[v[i]];
return p;
}
bool check()
{
for (int i = 1; i <= n; ++ i)
fr[i] = 0;
for (i = 1; i <= n; ++ i)
{
fr[v[i]] ++;
if (fr[v[i]] > 1)
return 0;
}
return 1;
}
void backtracking()
{
while (level)
{
bool ok = 0;
while (v[level] < n && !ok)
{
v[level] ++;
ok = check;
}
if (!ok)
level --;
else
if (ok && level == m)
{
nrtot ++;
ans += compute();
}
else
if (ok)
v[++ level] = v[level - 1];
}
}
int main()
{
f >> n >> m;
for (int i = 1; i <= n; ++ i)
f >> cote[i];
backtracking();
g << setprecision(7) << fixed << ans / nrtot;
return 0;
}