Submission #1247196

#TimeUsernameProblemLanguageResultExecution timeMemory
1247196tkhoi13Mobile (BOI12_mobile)C++20
0 / 100
1096 ms56008 KiB
#include <bits/stdc++.h>
#define db double
#define all(x) begin(x), end(x)
#define REP(i, n) for (int i = 0, _n = (n); i < _n; ++i)
using namespace std;

int n;
db l;
vector<pair<db, db>> cord;

bool ok(db x) {
    vector<pair<db, db>> cutted;
    for (auto &[x0, y0] : cord) {
        if (y0 > x) continue;
        db t = sqrt(x * x - y0 * y0);
        db l0 = max(0.0, x0 - t);
        db r0 = min(l, x0 + t);
        if (l0 > r0) continue;
        cutted.emplace_back(l0, r0);
    }

    if (cutted.empty()) return false;

    sort(all(cutted));
    db covered = 0;
    for (auto &[l0, r0] : cutted) {
        if (l0 > covered + 1e-9) return false;
        covered = max(covered, r0);
        if (covered >= l - 1e-9) return true;
    }

    return false;
}

void solve() {
    cin >> n >> l;
    vector<pair<int, int>> all;
    REP(i, n) {
        int x, y;
        cin >> x >> y;
        all.emplace_back(x, y);
    }

    sort(all.begin(), all.end());
    for (auto &[x, y] : all)
        if (cord.empty() || cord.back().first != x)
            cord.emplace_back(x, y);
    n = cord.size();

    db lo = 0, hi = 1e9 * sqrt(2);
    REP(_, 50) {
        db mid = (lo + hi) / 2;
        if (ok(mid)) hi = mid;
        else lo = mid;
    }

    cout << fixed << setprecision(6) << hi << '\n';
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    solve();
}
#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...