func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 100000;   const int MAXV = 100;   double prob[MAXN + 5][MAXV + 5];   int sz[MAXN + 5];   double temp[MAXV + 5];   int n;   double ncr(int r, int n) {     if (r > n) return 0;     double ret = 1;     for (int c = 0; c < r; c++) ret *= n - c;     for (int c = 0; c < r; c++) ret /= c + 1;     return ret;   }   double probabilityToTaketakeFromVuntasted(int take, int k, int untasted,                                             int from) {     int tasted = sz[from] - untasted;     return ncr(take, untasted) * ncr(k - take, tasted) / ncr(k, sz[from]);   }   int main() {     int c, c2;     memset(prob, 0, sizeof(prob));     double ret = 0;     scanf( %d , &n);     for (c = 0; c < n; c++) {       scanf( %d , &sz[c]);       prob[c][sz[c]] = 1.0;     }     for (c = 0; c < n; c++) ret += prob[c][0];     int qs;     for (scanf( %d , &qs); qs; qs--) {       int from, to, k;       scanf( %d%d%d , &from, &to, &k);       from--;       to--;       memset(temp, 0, sizeof(temp));       double denominator = ncr(k, sz[from]);       for (int untasted = 0; untasted <= MAXV; untasted++) {         int newk = min(k, untasted);         int tasted = sz[from] - untasted;         double n1 = 1, n2 = 1;         double d1 = 1, d2 = 1;         for (int i = 0; i < min(tasted, k); i++) {           d2 *= i + 1;           n2 *= tasted - i;         }         for (int take = 0; take <= k; take++) {           if (take > 0) {             d1 *= take;             if (take <= untasted)               n1 *= untasted - take + 1;             else               n1 = 0;           }           if (k - take > tasted) continue;           temp[untasted - take] +=               prob[from][untasted] * (n1 / d1) * (n2 / d2) / denominator;           if (k - take > 0) {             d2 /= k - take;             n2 /= tasted - (k - take) + 1;           }         }       }       ret += temp[0] - prob[from][0];       for (int i = 0; i <= MAXV; i++) prob[from][i] = temp[i];       sz[from] -= k;       sz[to] += k;       printf( %.10lf n , ret);     }     return 0;   }   