Submission #1247220

#TimeUsernameProblemLanguageResultExecution timeMemory
1247220tkhoi13Mobile (BOI12_mobile)C++20
0 / 100
1097 ms48176 KiB
#include <bits/stdc++.h>
#define db double
#define pb push_back
#define all(x) begin(x), end(x)
#define sz(x) ((int)(x).size())

using namespace std;

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

bool ok(db x) {
    vector<pair<db, db>> seg;
    for (auto &[xi, yi] : cord) {
        if (yi > x) continue;
        db dx = sqrt(x * x - yi * yi);
        db l0 = max(0.0, xi - dx);
        db r0 = min(L, xi + dx);
        if (l0 > r0) continue;
        seg.pb({l0, r0});
    }

    if (seg.empty()) return false;

    sort(all(seg));
    db last = 0;
    for (auto &[l, r] : seg) {
        if (l > last + 1e-7) return false;
        last = max(last, r);
        if (last >= L - 1e-7) return true;
    }
    return last >= L - 1e-7;
}

void solve() {
    cin >> n >> L;
    cord.clear();
    for (int i = 0; i < n; ++i) {
        db x, y;
        cin >> x >> y;
        if (cord.empty() || cord.back().first != x) {
            cord.pb({x, y});
        }
    }

    n = sz(cord);

    db l = 0, r = 2e9;
    for (int it = 0; it < 100; ++it) {
        db mid = (l + r) / 2;
        if (ok(mid))
            r = mid;
        else
            l = mid;
    }

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

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    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...