Pagini recente » Cod sursa (job #500275) | Cod sursa (job #2573001) | Cod sursa (job #2514794) | Cod sursa (job #311579) | Cod sursa (job #37510)
Cod sursa(job #37510)
#include <cstdio>
const int N = 25;
int n, k;
long double p[N];
long double rez;
int nr;
int nkf, kf;
int x[N];
void back( int lvl ) {
for (int i = (lvl > 0) ? x[lvl-1] + 1 : 0; i<n; ++i) {
x[lvl] = i;
if (lvl == k - 1) {
long double t = 1;
for (int i = 0; i < k; ++i) {
t *= p[x[i]];
}
rez = rez + t * nkf * kf;
nr += nkf * kf;
} else {
back(lvl+1);
}
}
}
int main() {
freopen("dezastru.in","r",stdin);
freopen("dezastru.out","w",stdout);
scanf("%d %d",&n,&k);
for (int i = 0; i<n; ++i) {
scanf("%Lf",&p[i]);
}
nkf = 1;
for (int i = 2; i <= n-k; ++i) {
nkf *= i;
}
kf = 1;
for (int i = 2; i <= k; ++i) {
kf *= i;
}
rez = 0;
nr = 0;
back(0);
rez /= nr;
printf("%Lf\n",rez);
return 0;
}