func_code_string: #include <bits/stdc++.h>   using namespace std;   struct ghost {     long long vx, vy;     long long magic;     ghost(long long x, long long y, long long a)         : vx(x), vy(y), magic((long long)a * x - y) {}   };   bool cmp1(const ghost& x, const ghost& y) { return x.magic < y.magic; }   bool cmp2(const ghost& x, const ghost& y) { return x.vx < y.vx; }   vector<ghost> G;   int main() {     long long n, a, b;     cin >> n >> a >> b;     for (long long i = 0; i < n; i++) {       long long x, vx, vy;       cin >> x >> vx >> vy;       ghost tmp(vx, vy, a);       G.push_back(tmp);     }     stable_sort(G.begin(), G.end(), cmp2);     stable_sort(G.begin(), G.end(), cmp1);     long long res = 0;     long long t_m = G[0].magic;     long long t_b = 0;     for (long long i = 0; i < G.size(); i++) {       if (G[i].magic != t_m) {         if (i - t_b > 1) {           res += ((i - t_b) * (i - t_b - 1));           long long t_vx = G[t_b].vx;           long long tt_b = t_b;           for (long long k = tt_b; k < i; k++) {             if (G[k].vx != t_vx) {               res -= ((k - tt_b) * (k - tt_b - 1));               tt_b = k;               t_vx = G[k].vx;             }           }           res -= (i - tt_b) * (i - tt_b - 1);         }         t_b = i;         t_m = G[i].magic;       }     }     res += ((n - t_b) * (n - t_b - 1));     long long t_vx = G[t_b].vx;     long long tt_b = t_b;     for (long long k = tt_b; k < n; k++) {       if (G[k].vx != t_vx) {         res -= ((k - tt_b) * (k - tt_b - 1));         tt_b = k;         t_vx = G[k].vx;       }     }     res -= (n - tt_b) * (n - tt_b - 1);     cout << res;     return 0;   }   