Submission #1316273

#TimeUsernameProblemLanguageResultExecution timeMemory
1316273sdfhoierewfdsMobile (BOI12_mobile)C++20
13 / 100
1098 ms80972 KiB
#include <bits/stdc++.h>
#include <iomanip>
using namespace std;

using lb = long double;

bool check(vector<pair<lb, lb>> &l1, lb &a, lb &n, lb &l){
    vector<pair<lb, lb>> segments;

    for (auto &p : l1){
        if (a >= fabsl(0.0L - p.second)){
            lb x = sqrt((a * a) - (fabsl(0.0L - p.second) * fabsl(0.0L - p.second)));
            segments.push_back({p.first - x, p.first + x});
        }
    }

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

    lb low = -1e18;
    lb high = -1e18;

    for (int i = 0; i < (int)segments.size(); i++){
        if (i == 0){
            low = segments[i].first;
            high = segments[i].second;
            continue;
        } else {
            if (segments[i].first > high){
                return false;
            } else {
                high = max(segments[i].second, high);
            }
        }
    }

    if (low <= 0 && high >= l){
        return true;
    } else {
        return false;
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    lb n, l;
    cin >> n >> l;

    vector<pair<lb, lb>> l1;
    for (int i = 0; i < (int)n; i++){
        lb a, b;
        cin >> a >> b;
        l1.push_back({a, b});
    }

    lb low = 0;
    lb high = 1e18;

    for (int i = 0; i < 80; i++){
        lb mid_point = (low + high) / 2;
        if (check(l1, mid_point, n, l)){
            high = mid_point;
        } else {
            low = mid_point;
        }
    }

    cout << fixed << setprecision(10) << high;
}
#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...