貌似有种东西能卡爆我的写法、、、
把二分的 r 设为 109 没有 TLE(117ms),设为 1010 会 TLE 一个点(其余最高122ms),设为 1018 会 TLE 十个点(其余最高168ms)
能不能试着改一下qwq
驱蚊器
去污区
轻武器
#include<bits/stdc++.h>
using namespace std;
#define N 200009
#define int long long
#define ld long double
int n,x[N],h[N];
ld eps = 1e-10;
ld K(int u,ld v,int x,int y){ return (ld)(y - v) * 1.0 / (x - u); }
ld B(int u,ld v,int x,int y){ return (ld)y - K(u,v,x,y) * x; }
bool chk(ld mid){
//cout<<mid<<":"<<endl;
int l = 1,r = 0,u = x[1],v = h[1];
for(int i = 2;i <= n;i++){
ld k = K(0,mid,u,v),b = B(0,mid,u,v);
//cout<<i<<" "<<k<<" "<<b<<endl;
if(k * x[i] + b >= h[i]) return 0;
if(k <= K(0,mid,x[i],h[i])) u = x[i],v = h[i];
}
return 1;
}
signed main(){
cin.tie(0); cout.tie(0);
ios::sync_with_stdio(0);
cin>>n;
for(int i = 1;i <= n;i++) cin>>x[i]>>h[i];
if(chk(0)){
cout<<-1<<endl;
return 0;
}
ld l = 0,r = 1e9,res = 0;
while(r - l >= eps){
ld mid = (l + r - eps) / 2.0;
if(chk(mid)) r = mid - eps,res = mid;
else l = mid + eps;
}
cout<<fixed<<setprecision(10)<<res<<endl;
return 0;
}