제출 #1324507

#제출 시각아이디문제언어결과실행 시간메모리
1324507jack205Mobile (BOI12_mobile)C++20
100 / 100
596 ms31620 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1000000;
long long n, l;
pair<double,double> a[MAXN+5];
const double eps = 1e-12;

struct Seg { double L, R; };

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> l;
    for(int i=1;i<=n;i++) cin >> a[i].first >> a[i].second;

    vector<Seg> stk;
    stk.reserve(n);

    auto ok = [&](double mid)->bool {
        stk.clear();
        double r2 = mid * mid;

        for (int i = 1; i <= n; i++) {
            double x = a[i].first, y = a[i].second;
            double yy = y * y;
            if (r2 < yy) continue;

            double dx = sqrt(max(0.0, r2 - yy));
            double L = x - dx, R = x + dx;

            while (!stk.empty() && stk.back().L >= L - eps) stk.pop_back();
            stk.push_back({L, R});
        }

        double cur = 0;
        for (auto &s : stk) {
            if (s.L > cur + eps) return false;
            cur = max(cur, s.R);
            if (cur >= l - eps) return true;
        }
        return cur >= l - eps;
    };

    double st = 0, ed = 1e12 + 5, ans = -1;
    for(int it=0; it<60; it++){
        double mid = (st + ed) / 2;
        if (ok(mid)) ans = ed = mid;
        else st = mid;
    }

    cout << fixed << setprecision(6) << 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...