Submission #1168723

#TimeUsernameProblemLanguageResultExecution timeMemory
1168723julia_08Mobile (BOI12_mobile)C++20
0 / 100
114 ms20104 KiB
#include <bits/stdc++.h> using namespace std; using ld = long double; using ll = long long; struct point{ ll x, y; }; vector<point> p; ld solve(int i, int j){ ll x1 = p[i].x, y1 = p[i].y; ll x2 = p[j].x, y2 = p[j].y; return (ld) (x2 * x2 + y2 * y2 - x1 * x1 - y1 * y1) / ((x2 - x1) * 2.0); } int main(){ cin.tie(0)->sync_with_stdio(0); int n; ll l; cin >> n >> l; for(int i=1; i<=n; i++){ ll x, y; cin >> x >> y; if(!p.empty() && x == p.back().x){ p.back().y = min(p.back().y, abs(y)); } else p.push_back({x, abs(y)}); } stack<int> q; ld last_x = 0; for(int i=0; i<p.size(); i++){ while(!q.empty() && solve(q.top(), i) < last_x){ last_x = solve(q.top(), i); q.pop(); } q.push(i); } ld ans = 0; int last_i = 0; if(!q.empty()){ last_i = q.top(); q.pop(); } while(!q.empty()){ ld cur_x = solve(q.top(), last_i); ans = max(ans, (ld) ((p[last_i].x - cur_x) * (p[last_i].x - cur_x) + p[last_i].y * p[last_i].y)); last_i = q.top(); q.pop(); } ld dist_1 = (ld) (p[1].x * p[1].x + p[1].y * p[1].y), dist_l = (ld) ((l - p[1].x) * (l - p[1].x) + p[1].y * p[1].y); for(int i=0; i<p.size(); i++){ dist_1 = min(dist_1, (ld) (p[i].x * p[i].x + p[i].y * p[i].y)); dist_l = min(dist_l, (ld) ((l - p[i].x) * (l - p[i].x) + p[i].y * p[i].y)); } ans = max({ans, dist_1, dist_l}); cout << fixed << setprecision(6) << sqrt(ans) << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...