hdu 3714 Error Curves(三分)

http://acm.hdu.edu.cn/showproblem.php?pid=3714

【题意】:

  题目意思看了很久很久,简单地说就是给你n个二次函数,定义域为[0,1000], 求x在定义域中每个x所在的n个函数的最大值的最小值。很拗口吧,显然这题不是组队或者耐心的做是不知道性质的,至少我没看出来。网上说是三分,我画了几个图,确实是。根据二次函数的性质,增长的快慢已经确定了,那的确是单峰的。那就OK了。另外eps的问题1e-8还是wa,1e-9AC。想了下,因为有系数a,b,c的缘故,一乘就WA了。代码就是三分了,没什么特殊的。(三分,什么时候我能主动的看出你???)

【题解】:

  第二个三分,三分啊三分,很难自己看出来啊!!!

【code】:

  

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h> using namespace std; #define eps 1e-9
#define INF 1e15 struct Nod
{
double a,b,c;
}node[]; int n; double func(double a,double b,double c,double x)
{
return a*x*x+b*x+c;
} double getMins(double x)
{
int i;
double maks = -INF;
for(i=;i<n;i++)
{
double temp = func(node[i].a,node[i].b,node[i].c,x);
if(maks<temp)
{
maks = temp;
}
}
return maks;
} void sanfen()
{
double l=,r=,mid,ans = INF;
while(l<=r)
{
mid = (l+r)/;
double temp1 = getMins(mid);
double temp2 = getMins(mid-eps);
if(temp1<temp2)
{
l = mid + eps;
}
else
{
r = mid - eps;
}
if(ans>temp1)
{
ans=temp1;
}
}
printf("%.4lf\n",ans);
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int i;
for(i=;i<n;i++)
{
scanf("%lf%lf%lf",&node[i].a,&node[i].b,&node[i].c);
}
sanfen();
}
return ;
}
上一篇:nyoj 1029/hdu 3714 Error Curves 三分


下一篇:UVALive 5009 Error Curves 三分