求助,求导二分挂了。能过样例
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define pre(i,a,b) for(int i=a;i>=b;i--)
#define N 10005
using namespace std;
const double eps = 0.0000000001;
int n;double a[N],b[N],c[N];
double f(double x,int op){
return a[op]*x*x+b[op]*x+c[op];
}
bool check(double x){
double l,r;l=r=-99864435310000000.10007;
rep(i,1,n)l=max(l,f(x,i));
rep(i,1,n)r=max(r,f(x+eps,i));
//cout<<x<<" "<<l<<" "<<r<<endl;
if(l>r)return true;
return false;
}
int main(){
int T;scanf("%d",&T);
while(T--){
scanf("%d",&n);
rep(i,1,n)scanf("%lf%lf%lf",&a[i],&b[i],&c[i]);
double l=0.00,r=1000.00;
while(l+eps<=r){
double mid=(l+r)/2.00;
if(check(mid))l=mid;
else r=mid;
}
//cout<<l<<" "<<r<<endl;
printf("%.4lf\n",l);
}
return 0;
}