func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 512345, lgN = 20, rootN = 1123;   const double eps = 1e-18;   int r[N], w[N];   vector<double> positive, negative;   double p[N];   int main() {     int n, c, d;     cin >> n >> c >> d;     for (int i = 1; i <= n; ++i) {       cin >> r[i] >> w[i];       r[i] -= c, w[i] -= d;       p[i] = (((double)r[i]) / (double)w[i]);     }     for (int i = 1; i <= n; ++i) {       double x = (((double)r[i]) / (double)w[i]);       if (w[i] > 0) {         positive.push_back(x);       } else if (w[i] < 0) {         negative.push_back(x);       }     }     sort(positive.begin(), positive.end());     sort(negative.begin(), negative.end());     long long first = 0, second = 0;     for (int i = 0; i < positive.size(); ++i) {       first += (lower_bound(negative.begin(), negative.end(), positive[i]) -                 negative.begin());     }     for (int i = 0; i < negative.size(); ++i) {       second += (lower_bound(positive.begin(), positive.end(), negative[i]) -                  positive.begin());     }     long long ans = 0;     for (int i = 1; i <= n; ++i) {       if (w[i] > 0) {         ans += ((long long)(negative.end() - upper_bound(negative.begin(),                                                          negative.end(), p[i]))) *                (lower_bound(negative.begin(), negative.end(), p[i]) -                 negative.begin());       } else if (w[i] < 0) {         ans += ((long long)(positive.end() - upper_bound(positive.begin(),                                                          positive.end(), p[i]))) *                (lower_bound(positive.begin(), positive.end(), p[i]) -                 positive.begin());       } else if (w[i] == 0) {         if (r[i] < 0)           ans += first;         else           ans += second;       }     }     printf( %lld n , ans);     return 0;   }   