Submission #1169523

#TimeUsernameProblemLanguageResultExecution timeMemory
1169523julia_08Mobile (BOI12_mobile)C++20
100 / 100
168 ms48704 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){ ld x1 = p[i].x, y1 = p[i].y; ld 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<pair<ld, int>> q; for(int i=0; i<p.size(); i++){ while(!q.empty() && solve(q.top().second, i) < q.top().first) q.pop(); ld x = -2e9; if(!q.empty()) x = solve(q.top().second, i); q.push({x, i}); } ld ans = 0; while(q.size() > 1){ ld x = q.top().first; int i = q.top().second; q.pop(); if(0 <= x && x <= l){ ans = max(ans, (ld) ((p[i].x - x) * (p[i].x - x) + p[i].y * p[i].y)); } } ld dist_1 = (ld) (p[0].x * p[0].x + p[0].y * p[0].y), dist_l = (ld) ((l - p[0].x) * (l - p[0].x) + p[0].y * p[0].y); for(int i=1; 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...