Pagini recente » Cod sursa (job #2284391) | Cod sursa (job #548830) | Cod sursa (job #1700738) | Cod sursa (job #1269137) | Cod sursa (job #1367743)
#include<stdio.h>
int v[26], checked[26], n, k, l = 0;
float p[26], all_prob;
void back(int nr_curent, int pos, float probTot)
{
if (k + 1 == nr_curent) {
l++;
/* int i;
float prob = 1;
l++;
if (pos) {
for (i = 1; i <= n; i++)
if (!checked[i])
prob *= p[i];
}
else {
for (i = 1; i <= k; i++)
prob *= p[v[i]];
}
*/
all_prob += probTot;
return;
}
int i;
for (i = 1; i <= n ; i++) {
if (!checked[i]) {
checked[i] = 1;
v[nr_curent] = i;
if (pos)
back(nr_curent + 1, pos, probTot/p[i]);
else
back(nr_curent + 1, pos, probTot * p[i]);
checked[i] = 0;
}
}
}
int main(void)
{
FILE *f_in = freopen("dezastru.in", "rt", stdin);
FILE *f_out = freopen("dezastru.out", "wt", stdout);
scanf("%d %d\n", &n, &k);
int i;
float totalProb = 1;
for (i = 1; i <= n; i++) {
scanf("%f", &p[i]);
totalProb *= p[i];
}
if (k > n / 2 + 1) {
k = n - k;
back(1, 1, totalProb);
} else
back(1, 0, 1);
printf("%f\n", all_prob / l);
}