Pagini recente » Istoria paginii runda/123_123 | Cod sursa (job #1148632) | Cod sursa (job #388843) | Cod sursa (job #885730) | Cod sursa (job #1367740)
#include<stdio.h>
int v[26], checked[26], n, k, l = 0;
float p[26], all_prob;
# define MIN(a, b) ((a > b)? b : a)
void back(int nr_curent, int pos)
{
if (k + 1 == nr_curent) {
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 += prob;
return;
}
int i;
for (i = 1; i <= n ; i++) {
if (!checked[i]) {
checked[i] = 1;
v[nr_curent] = i;
back(nr_curent + 1, pos);
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;
for (i = 1; i <= n; i++)
scanf("%f", &p[i]);
if (k > n / 2 + 1) {
k = n - k;
back(1, 1);
} else
back(1, 0);
printf("%f\n", all_prob / l);
}