func_code_string: #include <bits/stdc++.h>   using namespace std;   const double eps = 0.000000000000001;   int n, k;   double P[21];   bool eq(long double a, long double b) {     if (abs(a - b) < 0.000000000000001) return true;     return false;   }   bool memo[1 << 21];   long double dp[1 << 21];   long double doit(int msk) {     if (msk == 0) return 1;     if (memo[msk] == true) {       return dp[msk];     }     int i, j;     long double ret = 0, sm = 0;     for (i = 0; i < n; i++) {       if (msk & (1 << i)) {         sm += P[i];       }     }     for (i = 0; i < n; i++) {       if (msk & (1 << i)) {         ret += P[i] * doit(msk ^ ((1 << i))) / (1 - (sm - P[i]));       }     }     memo[msk] = true;     return dp[msk] = ret;   }   long double ans[21];   int main() {     scanf( %d%d , &n, &k);     int i, j, nz = 0;     for (i = 0; i < n; i++) {       scanf( %lf , &P[i]);       if (!eq(P[i], 0)) nz++;       ans[i] = 0;     }     for (i = 0; i < (1 << n); i++) {       if (__builtin_popcount(i) == min(k, nz)) {         int f = 1;         for (j = 0; j < n; j++) {           if (i & (1 << j))             if (eq(0, P[j])) {               f = 0;               break;             }         }         if (!f) continue;         long double x = doit(i);         for (j = 0; j < n; j++) {           if (i & (1 << j)) {             ans[j] += x;           }         }       }     }     for (i = 0; i < n; i++) {       printf( %.15lf  , (double)ans[i]);     }     return 0;   }   