func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Point {     double x, y, z;   };   double len[10000];   double sum[10000];   int n;   Point point[10001], potter;   double vp, vs;   double getDist(Point &a, Point &b) {     double x = a.x - b.x;     double y = a.y - b.y;     double z = a.z - b.z;     return sqrt(x * x + y * y + z * z);   }   double getGapConst(Point &tar, Point &vec) {     if (!(abs(vec.x - 0.0) < 1e-10)) return tar.x / vec.x;     if (!(abs(vec.y - 0.0) < 1e-10)) return tar.y / vec.y;     return tar.z / vec.z;   }   int main(void) {     scanf( %d , &n);     for (int i = 0; i <= n; i++)       scanf( %lf %lf %lf , &point[i].x, &point[i].y, &point[i].z);     scanf( %lf %lf , &vp, &vs);     scanf( %lf %lf %lf , &potter.x, &potter.y, &potter.z);     if ((abs(point[0].x - potter.x) < 1e-10) &&         (abs(point[0].y - potter.y) < 1e-10) &&         (abs(point[0].z - potter.z) < 1e-10)) {       printf( YES n );       printf( 0 n );       printf( %lf %lf %lf n , potter.x, potter.y, potter.z);       return 0;     }     for (int i = 0; i < n; i++) {       len[i] = getDist(point[i], point[i + 1]);       if (i == 0)         sum[i] = 0;       else         sum[i] = sum[i - 1] + len[i - 1];     }     bool isFound = false;     for (int i = 0; i < n; i++) {       Point vec;       vec.x = point[i + 1].x - point[i].x;       vec.y = point[i + 1].y - point[i].y;       vec.z = point[i + 1].z - point[i].z;       double startRatio = sum[i] / len[i];       Point start;       start.x = point[i].x - startRatio * vec.x;       start.y = point[i].y - startRatio * vec.y;       start.z = point[i].z - startRatio * vec.z;       Point unit;       unit.x = vec.x / len[i];       unit.y = vec.y / len[i];       unit.z = vec.z / len[i];       double s = 0, e = 1, mid;       for (int q = 0; q < 40; q++) {         mid = (s + e) / 2;         Point tar;         tar.x = point[i].x + vec.x * mid;         tar.y = point[i].y + vec.y * mid;         tar.z = point[i].z + vec.z * mid;         double dist = getDist(tar, potter);         double reqTime = dist / vp;         Point snitch;         snitch.x = start.x + unit.x * vs * reqTime;         snitch.y = start.y + unit.y * vs * reqTime;         snitch.z = start.z + unit.z * vs * reqTime;         Point gap;         gap.x = snitch.x - point[i].x;         gap.y = snitch.y - point[i].y;         gap.z = snitch.z - point[i].z;         double gapConst = getGapConst(gap, vec);         if ((abs(mid - gapConst) < 1e-10)) {           isFound = true;           printf( YES n );           printf( %.10lf n , reqTime);           printf( %.10lf %.10lf %.10lf n , tar.x, tar.y, tar.z);           break;         } else if (mid > gapConst)           e = mid;         else           s = mid;       }       if (isFound) break;     }     if (!isFound) printf( NO n );     return 0;   }   