#include<bits/stdc++.h>
#include <cstdio>
using namespace std;
#define int long long
#define ld long double
#define ff first
#define ss second
#define INF -1e18
#define mp make_pair
struct point{
    ld x,y;
    friend istream& operator>>(istream& in, point& p){
        in>>p.x>>p.y;
        return in;
    }
};
int n,k; 
ld d(point a, point b){
    return sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y));
}
ld f(point a, point b){
    ld res = ((b.y)*(b.y) +(b.x)*(b.x)- (a.y)*(a.y) - (a.x)*(a.x))/(2*(b.x - a.x));
    return res;
}
int32_t main(){
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr);
    cin>>n>>k;
    ld ans = 0;
    deque<point> needed;
    for(int i = 0; i < n; i++){
        point cur; cin>>cur;
        cur.y = abs(cur.y);
        if((int)needed.size() && needed.back().x == cur.x) continue;
        while((int)needed.size() > 1 && f(needed[(int)needed.size() - 2], needed.back()) > f(needed.back(), cur)){
            needed.pop_back();
        }
        needed.push_back(cur);
    }
    while((int)needed.size() > 1 && f(needed[0],needed[1]) < 0) needed.pop_front();
    while((int)needed.size() > 1 && f(needed[(int)needed.size()-2],needed.back())>k) needed.pop_back();
    for(int i = 0; i < (int)needed.size(); i++){
        point left = {0,0}, right = {(ld)k,0};
        if(i != 0){
            left.x =f(needed[i],needed[i-1]);
        }
        if(i != (int)needed.size() - 1){
            right.x = f(needed[i], needed[i+1]);
        }
        if(left.x < 0 || left.x > k || right.x < 0 || right.x > k) continue;
        ans = max({ans, d(needed[i],left), d(needed[i],right)});
    }
    cout<<fixed<<setprecision(6)<<ans;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |