题目链接: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;
}
区间内抛物线y最大最小值求解
本文介绍了一道ACM题目的解决方法,通过三分查找算法求解区间内抛物线y的最大最小值。代码实现简单,注重精度控制。
379

被折叠的 条评论
为什么被折叠?



