| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1304009 | hamstpan | Mobile (BOI12_mobile) | C++20 | 0 ms | 0 KiB |
#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>
using namespace std;
double first_true(double lo, double hi, function<bool(double)> f) {
hi += 1e-4;
while (lo + 1e-4 < hi) {
double mid = lo + (hi - lo) / 2;
if (f(mid)) hi = mid;
else lo = mid + 1e-4;
}
return lo;
}
int main() {
int n, l;
cin >> n >> l;
vector<pair<double, double>> a(n);
for (auto& i : a) cin >> i.first >> i.second;
cout << first_true(0, l, [&](double r) {
double mincovered = -1;
int i = 0;
while (i < n) {
while (r < a[i].second) ++i; //this doesn't do anything
if (a[i].first - sqrt(r * r - a[i].second * a[i].second) < mincovered) mincovered = a[i].first + sqrt(r * r - a[i].second * a[i].second);
++i;
}
return mincovered >= l;
});
}
