TOJ 3777.Function Problem(三分基础题目)

来源:互联网 发布:人类文明史图鉴淘宝 编辑:程序博客网 时间:2024/06/04 18:27

题目链接
这道题不难,就是函数求极值问题。其次要得出符合函数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));    }}
0 0
原创粉丝点击