func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 2e9;   struct point {     int x, y, id;     point operator-(const point &a) const {       point res;       res.x = x - a.x;       res.y = y - a.y;       return res;     }     int operator*(const point &a) const { return x * a.y - y * a.x; }   } p[100010], o;   int dis(point x, point y) {     return (x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y);   }   int qua(point x) {     if (x.x > 0 && x.y >= 0) {       return 1;     }     if (x.x <= 0 && x.y > 0) {       return 2;     }     if (x.x < 0 && x.y <= 0) {       return 3;     }     if (x.x >= 0 && x.y < 0) {       return 4;     }   }   bool cmp(point x, point y) {     if (fabs(atan2(x.y, x.x) - atan2(y.y, y.x)) > 0.1) {       return atan2(x.y, x.x) < atan2(y.y, y.x);     }     int tmp = (x - o) * (y - o);     if (tmp == 0) {       return dis(x, o) < dis(y, o);     } else {       return tmp > 0;     }   }   point Div(point x, point y) {     point res;     res.x = x.x * y.x + x.y * y.y;     res.y = x.y * y.x - x.x * y.y;     return res;   }   int n, ans, ansa = 1, ansb = -inf;   bool upd(int a, int b) {     if (1LL * a * ansb < 1LL * ansa * b) {       ansa = a;       ansb = b;       return true;     } else {       return false;     }   }   int main() {     scanf( %d , &n);     for (int i = 0; i < n; i++) {       scanf( %d%d , &p[i].x, &p[i].y);       p[i].id = i + 1;     }     sort(p, p + n, cmp);     p[n] = p[0];     for (int i = 0; i < n; i++) {       point x = Div(p[i], p[i + 1]);       if (x.y < 0) {         x.y = -x.y;       }       if (upd(x.y, x.x)) {         ans = i;       }     }     printf( %d %d n , p[ans].id, p[ans + 1].id);     return 0;   }   