题目链接
这道题不难,就是函数求极值问题。其次要得出符合函数F(x)是一个凸函数或者是单调递增的函数。故可以用三分的方法。虽然简单但我也错了好几次,总结一下:
报错、超时一次,是由于浮点数精度的问题。本来写的是(right-left)>1e-5,精度不够报错,随后精度改的太高,超时。
注意max函数的头文件是iomanip。
scanf输入double型变量时注意要用“lf”(双精度浮点型)。
#include <stdio.h>
#include <cmath>
#include <stdio.h>
#include <iomanip>
using namespace std;
double a1,a2,b1,b2,c1,c2;
double f(double x){
return max(a1*x*x + b1*x + c1,a2*x*x + b2*x + c2);
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%lf%lf%lf%lf%lf%lf",&a1,&b1,&c1,&a2,&b2,&c2);
double left = 0.0;double right =1000.0;
while((right-left)>1e-10){
double mid1 = left+(right - left)/3;
double mid2 = right-(right - left)/3;
if(f(mid1)<f(mid2)) right = mid2;
else left = mid1;
}
printf("%.4f\n",f(right));
}
}