제출 #1349145

#제출 시각아이디문제언어결과실행 시간메모리
1349145hokhaiinnMobile (BOI12_mobile)C++20
0 / 100
1097 ms31708 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
using pii = pair<int, int>;
using vvi = vector<vi>;
using str = string;
using vl = vector<ll>;
using vvl = vector<vl>;
using vp = vector<pii>;
using vs = vector<str>;
using ld = long double;
using si = set<int>;
using mii = map<int, int>;
#define st first
#define nd second
#define pb push_back
#define eb emplace_back
#define nn '\n'
#define ub upper_bound
#define lb lower_bound
#define LL_MAX LONG_LONG_MAX
#define LL_MIN LONG_LONG_MIN
#define it iterator

static const int _ = []() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    return 0;
}();

bool check(const int & n, const ld& m, const vector<pair<ld, ld>>& t, const ld & d){
    ld l, r, ran;
    ran = sqrt(d * d - t[0].nd * t[0].nd);
    l = t[0].st - ran;
    r = t[0].st + ran;
    stack<ld> gap;
    for (int i = 1; i < n; ++i){
        ran = sqrt(d * d - t[i].nd * t[i].nd);
        if (r >= 0 && t[i].st - ran > r){
            gap.push(r);
        }
        while (!gap.empty() && t[i].st - ran <= gap.top()){
            gap.pop();
        }
        l = min(l, t[i].st - ran);
        r = max(r, t[i].st + ran);
    }
    return gap.empty() && r >= m && l <= 0;
}

int main(){
    int n;
    ld l;
    cin >> n >> l;
    fixed(cout);
    vector<pair<ld, ld>> t(n);
    for (int i = 0; i < n; ++i){
        cin >> t[i].st >> t[i].nd;
    }
    ld lo, hi, mid;
    lo = 0;
    hi = 3e9;
    while (lo < hi - 1e-3){
        mid = (lo + hi) / 2;
        if (check(n, l, t, mid)){
            hi = mid;
        } else {
            lo = mid + 1e-3;
        }
    }
    cout << setprecision(6) << lo;
    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...