Submission #1113952

#TimeUsernameProblemLanguageResultExecution timeMemory
1113952slyceloteMobile (BOI12_mobile)C++17
75 / 100
1083 ms44356 KiB
#include <cmath>
#include <iostream>
#include <vector>

using namespace std;

int main() {
    cin.tie(0); iostream::sync_with_stdio(false);

    int n;
    long double d;
    cin >> n >> d;
    vector<long double> x, y;
    x.reserve(n); y.reserve(n);
    while (n--) {
        long double xx, yy; cin >> xx >> yy;
        yy = fabs(yy);
        if (!x.empty() && x.back() == xx) {
            y.back() = min(y.back(), yy);
        } else {
            x.push_back(xx);
            y.push_back(yy);
        }
    }
    n = x.size();
    long double L = 0, R = 4e9;
    while (R - L > 1e-4) {
        long double M = (L + R) / 2;
        vector<pair<long double, long double>> segs;
        for (int i = 0; i < n; ++i) if (M > y[i]) {
            long double len = sqrt(M*M - y[i]*y[i]);
            long double start = max((long double)0.0, x[i] - len), end = min(d, x[i] + len);
            if (start > end) {
                continue;
            }
            while (!segs.empty() && start < segs.back().second) {
                start = min(start, segs.back().first);
                end = max(end, segs.back().second);
                segs.pop_back();
            }
            segs.push_back({start, end});
        }
        if (segs.empty() || segs.size() > 1 || segs.back().first > 0 || segs.back().second < d) {
            L = M;
        } else {
            R = M;
        }
    }

    cout.precision(20);
    cout << (L+R)/2 << endl;
}
#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...