func_code_string: #include <bits/stdc++.h>   using namespace std;   struct mat {     double a[3][3];     mat() {       for (int i = (int)(0); i <= (int)(2); ++i)         for (int j = (int)(0); j <= (int)(2); ++j) a[i][j] = 0;     }     mat operator*(const mat &b) const {       mat c;       for (int i = (int)(0); i <= (int)(2); ++i)         for (int j = (int)(0); j <= (int)(2); ++j)           for (int k = (int)(0); k <= (int)(2); ++k)             c.a[i][j] += a[i][k] * b.a[k][j];       return c;     }   };   struct node {     int id;     long long las;     mat pre;   };   vector<node> S;   mat bas[100005], f[40], org;   pair<double, double> p[100005];   int n;   long long m;   double b;   int main() {     scanf( %d%lld , &n, &m);     for (int i = (int)(1); i <= (int)(n); ++i) {       double x, y, v;       scanf( %lf%lf%lf , &x, &y, &v);       b = max(b, y * v);       p[i] = pair<double, double>(x * v, v);     }     sort(p + 1, p + n + 1, greater<pair<double, double> >());     org.a[2][0] = 1;     for (int i = (int)(1); i <= (int)(n); ++i) {       bas[i].a[1][1] = 1;       bas[i].a[2][2] = 1;       bas[i].a[0][0] = 1 - p[i].second;       bas[i].a[0][1] = p[i].second;       bas[i].a[0][2] = p[i].first;       bas[i].a[1][2] = b;     }     S.push_back((node){1, m, org});     for (int i = (int)(2); i <= (int)(n); ++i) {       for (;;)         if ((bas[i] * S.back().pre).a[0][0] >             (bas[S.back().id] * S.back().pre).a[0][0])           S.pop_back();         else           break;       if (!S.back().las) continue;       node tmp = S.back();       f[0] = bas[tmp.id];       for (int j = (int)(1); j <= (int)(35); ++j) f[j] = f[j - 1] * f[j - 1];       for (int j = (int)(35); j >= (int)(0); --j)         if (tmp.las - (1ll << j) >= 1)           if ((bas[i] * f[j] * tmp.pre).a[0][0] <=               (bas[tmp.id] * f[j] * tmp.pre).a[0][0]) {             tmp.pre = f[j] * tmp.pre;             tmp.las -= (1ll << j);           }       tmp.pre = f[0] * tmp.pre;       --tmp.las;       if (tmp.las) tmp.id = i;       S.push_back(tmp);     }     int id = S.back().id;     long long las = S.back().las;     mat ans = S.back().pre, x = bas[id];     for (; las; las /= 2, x = x * x)       if (las & 1) ans = x * ans;     printf( %.15lf n , ans.a[0][0]);   }   