Submission #86943

#TimeUsernameProblemLanguageResultExecution timeMemory
86943popovicirobertMobile (BOI12_mobile)C++14
48 / 100
824 ms132096 KiB
#include <bits/stdc++.h> #define lsb(x) (x & (-x)) #define ll long long #define ull unsigned long long // 217 // 44 using namespace std; const long double eps = 1e-9; const long double INF = 1e18; const int MAXN = (int) 1e6; struct Point { long double x, y; }pts[MAXN + 1]; inline long double dist(Point a, Point b) { return sqrt(1LL * (a.x - b.x) * (a.x - b.x) + 1LL * (a.y - b.y) * (a.y - b.y)); } struct Data { long double l, r; int id; }; vector <Data> stk; inline bool eq(long double a, long double b) { return fabs(a - b) < eps; } long double L; inline bool ok(long double &l, long double &r, Point b) { Point a = pts[stk.back().id]; if(eq(a.x, b.x)) { return 0; } long double x = 1.0 * (b.x * b.x + b.y * b.y - a.x * a.x - a.y * a.y) / (2 * (b.x - a.x)); if(x > L) { return 0; } if(dist(b, {stk.back().l, 0}) - dist(a, {stk.back().l, 0}) < 0) { l = stk.back().l; r = L; return 1; } if(x - stk.back().l > 0) { stk.back().r = x; l = x; r = L; return 0; } l = stk.back().l; r = L; return 1; } int main() { //ifstream cin("B.in"); //ofstream cout("B.out"); int i, n; ios::sync_with_stdio(false); cin >> n >> L; for(i = 1; i <= n; i++) { cin >> pts[i].x >> pts[i].y; } stk.push_back({0, L, 1}); for(i = 2; i <= n; i++) { long double l = INF, r = -INF; while(!stk.empty()) { if(ok(l, r, pts[i])) { stk.pop_back(); } else { break; } } if(r - l > 0) { stk.push_back({l, r, i}); } } long double ans = 0; for(auto it : stk) { ans = max(ans, dist(pts[it.id], {it.l, 0})); ans = max(ans, dist(pts[it.id], {it.r, 0})); } cout << fixed << setprecision(20) << ans; //cin.close(); //cout.close(); 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...