Submission #1270202

#TimeUsernameProblemLanguageResultExecution timeMemory
1270202os_bein_lagginMobile (BOI12_mobile)C++20
50 / 100
1096 ms31712 KiB
#include <bits/stdc++.h>
using namespace std;

struct Interval {
    double l, r;
    bool operator<(const Interval &other) const {
        if (fabs(l - other.l) < 1e-12) return r < other.r;
        return l < other.l;
    }
};

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

    int N;
    long long L;
    cin >> N >> L;

    vector<pair<long long, long long> > stations(N);
    for (int i = 0; i < N; i++) {
        cin >> stations[i].first >> stations[i].second;
    }

    auto canCover = [&](double R) -> bool {
        vector<Interval> intervals;
        intervals.reserve(N);

        for (int i = 0; i < N; i++) {
            long long x = stations[i].first;
            long long y = stations[i].second;
            if (1.0 * y * y > R * R) continue; // cannot reach highway
            double dx = sqrt(R * R - 1.0 * y * y);
            double left = max(0.0, (double)x - dx);
            double right = min((double)L, (double)x + dx);
            if (left <= right) intervals.push_back(Interval{left, right});
        }

        if (intervals.empty()) return false;

        sort(intervals.begin(), intervals.end());

        double covered = 0.0;
        for (size_t i = 0; i < intervals.size(); i++) {
            if (intervals[i].l > covered + 1e-9) return false; // gap
            covered = max(covered, intervals[i].r);
            if (covered >= L) return true;
        }
        return false;
    };

    double lo = 0.0, hi = 2e9; // upper bound big enough
    for (int it = 0; it < 60; it++) {
        double mid = (lo + hi) / 2.0;
        if (canCover(mid)) hi = mid;
        else lo = mid;
    }

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