题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3714
题意:给你一个区间,和一些抛物线,让你求区间内所有x取值对应y最大值最小!
题目比较简单,三分,注意精度控制
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
#define maxn 11000
#define inf -1e12
#define eps 1e-10 //1e-8会wa
#define MAX(a,b) (a>b?a:b)
#define MIN(a,b) (a<b?a:b)
struct node{
double a,b,c;
}po[maxn];
int n;
double find_min(double x){
double ans=inf,tem,h=x*x;
for(int i=0;i<n;i++){
tem=po[i].a*h+po[i].b*x+po[i].c;
ans=MAX(tem,ans);
}
return ans;
}
double find_ans(double l,double r){
double ans=1e12,mid,tem,now;
while(l<r){
mid=(l+r)/2;
tem=find_min(mid);
ans=MIN(ans,tem);
mid+=eps;
now=find_min(mid);
mid-=eps;
if(now<tem) l=mid+eps;
else r=mid-eps;
}
printf("%.4lf\n",ans);
return ans;
}
int main(){
int i,j,k,t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%lf%lf%lf\n",&po[i].a,&po[i].b,&po[i].c);
find_ans(0,1000);
}
return 0;
}