#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(){
#ifdef LOCAL_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
cin>>n>>k;
ld ans = INF;
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 = {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;
}
Compilation message (stderr)
mobile.cpp: In function 'int32_t main()':
mobile.cpp:53:38: warning: narrowing conversion of 'k' from 'long long int' to 'long double' [-Wnarrowing]
53 | point left = {0,0}, right = {k,0};
| ^
# | 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... |