Submission #1309762

#TimeUsernameProblemLanguageResultExecution timeMemory
1309762tin_leMobile (BOI12_mobile)C++20
0 / 100
137 ms32972 KiB
#include<bits/stdc++.h> #if defined(LOCAL) && __has_include("debug.h") #include "debug.h" #else #define debug(...) #endif using i64 = long long; using u64 = unsigned long long; using i128 = __int128; using ld = long double; struct Line { i64 m, b; ld X; ld eval(ld x) const { return (ld)m * x + (ld)b; } }; struct MonoCHT { std::deque<Line> dq; MonoCHT() {} static bool bad(const Line &L1, const Line &L2, const Line &L3) { i128 left = (i128)(L2.b - L1.b) * (i128)(L2.m - L3.m); i128 right = (i128)(L3.b - L2.b) * (i128)(L1.m - L2.m); return left >= right; } static ld isectX(const Line& A, const Line& B) { return (ld)(B.b - A.b) / (ld)(A.m - B.m); } void add(Line L) { if(!dq.empty() && dq.back().m == L.m) { if(dq.back().b >= L.b) return; dq.pop_back(); } while(dq.size() >= 2 && bad(dq[dq.size() - 2], dq[dq.size() - 1], L)) dq.pop_back(); L.X = dq.empty() ? (ld)-1e300L : isectX(dq.back(), L); while(!dq.empty() && L.X <= dq.back().X) { dq.pop_back(); while(dq.size() >= 2 && bad(dq[dq.size() - 2], dq[dq.size() - 1], L)) dq.pop_back(); L.X = dq.empty() ? (ld)-1e300L : isectX(dq.back(), L); } dq.push_back(L); } }; void solve() { // (x - xi)^2 + yi^2 // x^2 + min((- 2xix + xi^2 + yi^2)) int n, L; std::cin >> n >> L; MonoCHT cht; for(int i = 0; i < n; i++) { i64 x, y; std::cin >> x >> y; cht.add(Line(2 * x, -x * x - y * y, -1e300L)); } const auto& q = cht.dq; ld res = 0; for(int i = 0; i < int(q.size()); i++) { auto f = [&](ld x) -> ld { return x * x - q[i].eval(x); }; res = std::max(res, f(std::fmax(0.0, std::fmin(L, q[i].X)))); if(i + 1 < int(q.size())) { res = std::max(res, f(std::fmax(0.0, std::fmin(L, q[i + 1].X)))); } } std::cout << std::fixed << std::setprecision(6) << sqrtl(res) << '\n'; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t = 1; //std::cin >> t; while(t--) { solve(); } 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...