func_code_string: #include <bits/stdc++.h>   using namespace std;   double prb[(1 << 21)], p[25], ans[25];   int vis[(1 << 21)];   bool eq(double a, double b) { return (abs(a - b) < 1e-12); }   int main() {     int i, n, k, tmp;     scanf( %d , &n);     scanf( %d , &k);     tmp = n;     for (i = 0; i < n; i++) {       scanf( %lf , &p[i]);       if (eq(p[i], 0)) tmp--;     }     k = min(k, tmp);     prb[0] = 1;     queue<int> all;     all.push(0);     while (!all.empty()) {       int now = all.front();       all.pop();       if (__builtin_popcount(now) == k)         for (i = 0; i < n; i++)           if (now & (1 << i)) ans[i] += prb[now];       double gun = 0;       for (i = 0; i < n; i++)         if (!(now & (1 << i))) gun += p[i];       gun = 1 / gun;       if (__builtin_popcount(now) < k)         for (i = 0; i < n; i++) {           if ((now & (1 << i)) || eq(p[i], 0)) continue;           tmp = now ^ (1 << i);           prb[tmp] += (p[i] * gun * prb[now]);           if (!vis[tmp]) {             vis[tmp] = 1;             all.push(tmp);           }         }     }     for (i = 0; i < n; i++) printf( %.15f  , ans[i]);     printf(  n );     return 0;   }   