func_code_string: #include <bits/stdc++.h>   using namespace std;   int N, K, T, to[25];   long double prob[25], dp[2000100], val[25], ans[25];   bool v[2000100];   long double calc(int mask) {     if (v[mask]) return dp[mask];     v[mask] = 1;     int i;     long double tot = 0;     for (i = 0; i < N; i++)       if (mask & (1 << i)) tot += prob[i];     for (i = 0; i < N; i++)       if (mask & (1 << i)) {         tot -= prob[i];         dp[mask] = dp[mask] + (prob[i] * calc(mask - (1 << i))) / (1 - tot);         tot += prob[i];       }     return dp[mask];   }   void get_masks(int mask, int cnt, int p) {     if (p == N || cnt == K) {       if (cnt != K) return;       calc(mask);       int i;       for (i = 0; i < N; i++)         if (mask & (1 << i)) val[i] += dp[mask];       return;     }     get_masks(mask, cnt, p + 1);     get_masks(mask + (1 << p), cnt + 1, p + 1);   }   int main() {     cin >> N >> K;     int i;     for (i = 0; i < N; i++) {       cin >> prob[i];       if (prob[i] != 0) {         T++;         prob[T - 1] = prob[i];         to[T - 1] = i;       }     }     swap(T, N);     if (K > N) K = N;     dp[0] = 1, v[0] = 1;     get_masks(0, 0, 0);     for (i = 0; i < N; i++) ans[to[i]] = val[i];     for (i = 0; i < T; i++) cout << fixed << setprecision(9) << ans[i] <<    ;     cout <<   n ;     return 0;   }   