#include<iostream>
#include<cstdio>
using namespace std;
int a[10010],b[10010],c[10010],n; //此题是三分问题,可以两两曲线看,最后得到的曲线是开口向上的单值函数,
double max(double x)
{
double max1,sum;
int i;
max1=a[0]*x*x+b[0]*x+c[0];
for(i=1;i<n;i++)
{
sum=a[i]*x*x+b[i]*x+c[i]; //这个地方傻逼了,我将max初值设为0,但是如果函数值全部都是负的,岂不是永远是0
if(sum>max1)
max1=sum;
}
return max1;
}
int main()
{
int t,i,j;
double left,right,mid1,mid2;
cin>>t;
for(i=0;i<t;i++)
{
cin>>n;
for(j=0;j<n;j++)
cin>>a[j]>>b[j]>>c[j];
left=0.0;right=1000.0;
while(right-left>0.0000000001)
{
mid1=left+(right-left)/3;
mid2=right-(right-left)/3;
if(max(mid1)<max(mid2))
right=mid2;
else
left=mid1;
}
printf("%.4lf\n",max(mid1));
}
return 0;
}
hdu 3714 三分
最新推荐文章于 2021-09-30 14:53:46 发布