# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1249182 | somefolk | Mobile (BOI12_mobile) | C++20 | 0 ms | 0 KiB |
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <queue>
#include <set>
#include <unordered_set>
#include <complex>
#include <list>
#include <cassert>
#include <chrono>
#include <random>
#include <stack>
#include <iomanip>
#include <fstream>
using namespace std;
#define endl "\n"
#define int long long
const int INF = 1e9+7;
const int MOD = 1e9+7;
void solve(){
int n;
double m;
cin >> n >> m;
vector<pair<double, double>> a(n);
for(int i = 0; i < n; i++){
cin >> a[i].first >> a[i].second;
}
auto check = [&](double R){
double r = 0;
for(auto &[x, y] : a){
int a = x-sqrt(R*R-y*y), b = x+sqrt(R*R-y*y);
if(a <= r){
r = max(r, b);
}
}
return (r >= m);
};
double l = 1, r = 1.5e9, sol = 0;
while(r-l > 1e-3){
double mid = (l+r)/2;
if(check(mid)){
sol = mid;
r = mid;
} else {
l = mid;
}
}
cout << fixed << setprecision(4) << sol << endl;
}
int32_t main(){
ios_base::sync_with_stdio(false); cin.tie(nullptr);
int t = 1;
// cin >> t;
while(t--) solve();
return 0;
}