Language: C++

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <cmath>
#include <iomanip>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <bitset>

using namespace std;

#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define REP(i, n) FOR(i, 0, n)
#define SORT(c) sort((c).begin(), (c).end())

typedef long long ll;
typedef pair<int, int> P;
typedef vector<int> V;
typedef map<int, int> M;

constexpr ll INF = 1e18;
constexpr ll MOD = 1e9 + 7;

struct l
{
    double a;
    double b;
    double c;
};

pair<double, double> crs(double a1, double b1, double c1, double a2, double b2, double c2)
{
    pair<double, double> res;

    res.first = (b1 * c2 - b2 * c1) / (b1 * a2 - b2 * a1);
    res.second = (a1 * c2 - a2 * c1) / (a1 * b2 - a2 * b1);

    return res;
}

int bit[112345], bit_n;

int bit_sum(int i)
{
    int s = 0;
    while (i > 0)
    {
        s += bit[i];
        i -= i & -i;
    }
    return s;
}

void bit_add(int i, int x)
{
    while (i <= bit_n)
    {
        bit[i] += x;
        i += i & -i;
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    l p[41234];

    int n;

    cin >> n;

    REP(i, n)
    cin >> p[i].a >> p[i].b >> p[i].c;

    sort(p, p + n, [](const l &s, const l &t) {
        return ((s.a / s.b) < (t.a / t.b));
    });

    double lx = -100000, rx = 100000, ly = -100000, ry = 100000;

    int t = ((n * (n - 1) / 2) + 1) / 2;

    REP(z, 100)
    {
        double mid = (lx + rx) / 2;

        bit_n = n + 1;
        memset(bit, 0, sizeof(bit));

        vector<pair<double, int>> v;

        REP(i, n)
        {
            double c = (p[i].c - p[i].a * mid) / p[i].b;

            v.push_back({c, i + 1});
        }

        SORT(v);

        int sum = 0;

        REP(i, n)
        {
            sum += v[i].second - 1 - bit_sum(v[i].second);
            bit_add(v[i].second, 1);
        }

        if (sum < t)
            lx = mid;
        else
            rx = mid;
    }

    sort(p, p + n, [](const l &s, const l &t) {
        return ((s.b / s.a) < (t.b / t.a));
    });

    REP(z, 100)
    {
        double mid = (ly + ry) / 2;

        bit_n = n + 1;
        memset(bit, 0, sizeof(bit));

        vector<pair<double, int>> v;

        REP(i, n)
        {
            double c = (p[i].c - p[i].b * mid) / p[i].a;

            v.push_back({c, i + 1});
        }

        SORT(v);

        int sum = 0;

        REP(i, n)
        {
            sum += v[i].second - 1 - bit_sum(v[i].second);
            bit_add(v[i].second, 1);
        }

        if (sum < t)
            ly = mid;
        else
            ry = mid;
    }

    cout << setprecision(20) << rx << " " << ry << endl;

    return 0;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:94:9: error: 'memset' was not declared in this scope
   94 |         memset(bit, 0, sizeof(bit));
      |         ^~~~~~
a.cc:13:1: note: 'memset' is defined in header '<cstring>'; this is probably fixable by adding '#include <cstring>'
   12 | #include <bitset>
  +++ |+#include <cstring>
   13 | 
a.cc:130:9: error: 'memset' was not declared in this scope
  130 |         memset(bit, 0, sizeof(bit));
      |         ^~~~~~
a.cc:130:9: note: 'memset' is defined in header '<cstring>'; this is probably fixable by adding '#include <cstring>'