#include<bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef long long ll;
int n;
ll r;
int main()
{
cin >> n >> r;
ll a[n], b[n], c[n], d[n];
for(int i = 0; i < n; i ++)
cin >> a[i] >> b[i] >> c[i] >> d[i];
vector<pair<ll, ll> > lr;
for(int i = 0; i < n; i ++)
{
pair<ll,ll> res;
ll mi = 1e9, mx = -1;
if(a[i] - c[i] == 0) // the line is horizontal
{
if(a[i] * a[i] > r * r) continue;
ll b2 = r * r - a[i] * a[i];
ll b1 = sqrtl(b2);
mi = (b1 - b[i]) / (d[i] - b[i]);
mx = (-b1 - b[i]) / (d[i] - b[i]);
if(mx < mi) swap(mx, mi);
}
else if(b[i] - d[i] == 0)
{
if(b[i] * b[i] > r * r) continue;
ll b2 = r * r - b[i] * b[i];
ll b1 = sqrtl(b2);
mi = (b1 - a[i]) / (c[i] - a[i]);
mx = (-b1 - a[i]) / (c[i] - a[i]);
if(mi > mx) swap(mi, mx);
}
else
{
}
res = {mi, mx};
lr.push_back(res);
}
sort(lr.begin(), lr.end());
multiset<ll> st;
int ans = 0;
int j = -1;
for(auto [l, r] : lr)
{
while(j + 1 < lr.size() && lr[j + 1].first <= l)
st.insert(lr[j + 1].second), j++;
while(st.size() && *st.begin() < l)
st.erase(st.begin());
ans = max(ans, (int)(st.size()));
}
cout << ans << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |