This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <queue>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <iomanip>
#include <map>
#include <cstring>
#include <set>
#include <stack>
#include <bitset>
#define dbug(x) cout << (#x) << " -> " << x << endl
#define ll long long
#define INF (1e9)
#define MAX (int) (2e5 + 5)
#define MOD 1000000007
#define par pair<int, int>
#define all(v) v.begin(), v.end()
#define sz(x) (int) ((x).size())
#define esq(x) (x<<1)
#define dir(x) ((x<<1)|1)
#define lsb(x) (x & -x)
#define W(x) cout << #x << ": " << x << endl
#define Wii(x) cout << x.first << ' ' << x.second << endl
#define _ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
ll n, r, a, b, deltax, deltay, resp, qtd;
vector<pair<ll, ll> > v;
priority_queue<ll, vector<ll>, greater<ll> > pq;
pair<ll, ll> tempo(double x, double y, double dx, double dy)
{
int ok = 0;
double a = (dx*dx) + (dy*dy);
double b = (2*dx*x) + (2*dy*y);
double c = (x*x) + (y*y) - (r*r);
// dbug(a);
// dbug(b);
// dbug(c);
double delta = (b*b) - (4*a*c);
// dbug(delta);
if (delta<0) return {INF, INF};
double r1 = (-b - sqrt(delta)) / (2*a);
double r2 = (-b + sqrt(delta)) / (2*a);
// dbug(delta);
// dbug(r1);
// dbug(r2);
// dbug(sqrt(delta));
for (ll i = max((double)0, r1-2); i <= r1+2; i++)
{
ll px = x + (dx*i);
ll py = y + (dy*i);
// dbug(px);
// dbug(py);
if ((px*px) + (py*py) <= r*r)
{
// dbug(r1);
ok = 1;
r1 = i;
break;
}
}
for (ll i = r2+2; i >= max((double)0, r2-2); i--)
{
ll px = x + (dx*i);
ll py = y + (dy*i);
if ((px*px) + (py*py) <= r*r)
{
ok = 1;
r2 = i;
break;
}
}
if (!ok) return {INF, INF};
return {max(0LL, (ll)r1), (ll)r2};
}
int main()
{_
cin >> n >> r;
for (int i = 1; i <= n; i++)
{
cin >> a >> b >> deltax >> deltay;
deltax -= a;
deltay -= b;
// dbug(deltax);
// dbug(deltay);
v.push_back(tempo(a, b, deltax, deltay));
}
sort(all(v));
for (auto[l, r] : v)
{
if (l == INF && r == INF) break;
// cout << l << ' ' << r << endl;
while (!pq.empty() && pq.top() < l) pq.pop(), qtd--;
qtd++;
resp = max(resp, qtd);
pq.push(r);
}
cout << resp << endl;
}
Compilation message (stderr)
noras.cpp: In function 'int main()':
noras.cpp:98:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
98 | for (auto[l, r] : v)
| ^
# | 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... |