HDU 3714 Error Curves 简单三分

题意:有一堆二次函数的系数a,b,c,自变量x的取值范围是【1,1000】问这一堆二次函数中当x取和值时使得f(x)的最小值中的最大值最小。


想法:三分x,每组系数计算一次。


#include<iostream>
#include<cstring>
#include<cstdio>
#define eps 1e-9
using namespace std;
int a[10000+5],b[10000+5],c[10000+5],n;
double cal(double x)
{
	double maxx=-1000000;
	for(int i=1;i<=n;i++)
	{
		double y=a[i]*x*x+b[i]*x+c[i];
		if(maxx<y) maxx=y;
	}
	return maxx;
}
double tri_div()
{
	double lft=0,rht=1000;
	while(rht-lft>eps)
	{
		double mid=(lft+rht)/2;
		double midd=(mid+rht)/2;
		if(cal(mid)<cal(midd))
		{
			rht=midd;
		}
		else lft=mid;
	}
	return cal(lft);
}
int main()
{
	int test;
	scanf("%d",&test);
	while(test--)
	{
		double res=-100000;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i]>>b[i]>>c[i];
		}
		printf("%.4lf\n",tri_div());
	}
	return 0;
}

你可能感兴趣的:(HDU 3714 Error Curves 简单三分)