一本通——曲线
原题链接一本通——曲线https://loj.ac/p/10013
这是一个经典的三分问题
二分模板只适用于解决单调问题,如果用到凸性函数或者凹形函数求他们的最大值或者小值就要用三分模板来解决
题解
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
double a[N],b[N],c[N];
int n;
double check(double k){
double js=1e-9;
for(int i=1;i<=n;i++){
js=max(js,a[i]*k*k+b[i]*k+c[i]);
}
return js;
}
int main(){
int t;
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i]>>c[i];
}
double l=0,r=2000,eps=1e-10;
while(r-l>eps){
double mid=(l+r)/2;
double midmid=(mid+r)/2;
if(check(midmid)<check(mid)){
l=mid;
}
else{
r=midmid;
}
}
double ans=check(l);
printf("%.4lf\n",ans);
}
return 0;
}