Cod sursa(job #641240)
#include <stdio.h>
#define IN "dezastru.in"
#define OUT "dezastru.out"
#define N 26
double p[N], total;
unsigned long long sol[N], pus[N], n, k, nf;
void calcul(unsigned long long);
int main(void) {
unsigned long long i;
freopen(IN, "r", stdin); freopen(OUT, "w", stdout);
scanf("%llu %llu", &n, &k);
for(i = 1; i <= n; ++i) {
scanf("%lf", &p[i]);
nf *= i;
}
calcul(1);
printf("%.6f\n", total / nf);
return 0;
}
void calcul(unsigned long long m) {
unsigned long long i;
double aux;
if(m == k + 1) {
aux = 1;
for(i = 1; i <= k; ++i)
aux *= p[sol[i]];
total += aux;
++nf;
} else {
for(i = 1; i <= n; ++i) {
if(!pus[i]) {
sol[m] = i;
pus[i] = 1;
calcul(m + 1);
pus[i] = 0;
}
}
}
}