思路是二分最小的无法全部看见的点,用斜率判断,AC * 8+WA * 19
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
const double eps = 1e-10;
int n;
struct node {
int x, h;
} a[N];
bool check(double h0) {
double maxx = -1e18;
for(int i = 1; i <= n; i++) {
if(((double)a[i].h - h0) / a[i].x <= maxx) return false;
maxx = max(maxx, ((double)a[i].h - h0) / a[i].x);
}
return true;
}
int main() {
scanf("%d", &n);
double l = 0, r = 0;
for(int i = 1; i <= n; i++) scanf("%d%d", &a[i].x, &a[i].h), r = max(r, (double)a[i].h);
if(check(0.00)) {
cout << -1;
return 0;
}
while(r - l >= eps) {
double mid = (l + r) / 2;
if(check(mid)) r = mid;
else l = mid;
}
printf("%.15f", r);
return 0;
}