HDU 2899 Strange fuction

来源:互联网 发布:网络直播都有什么内容 编辑:程序博客网 时间:2024/05/16 02:48

题目地址:点击打开链接

思路:先求导看单调性,不可能有单增的情况,因为y的取值大于0小于1e10,有单调递减的情况,100处为最小值,对函数二次求导大于0,原函数为凹函数,导函数为递增函数,导函数图像如下图,导函数y值为0时,值最小,所以左右值的差小于精度即可求出值


AC代码:

#include <stdio.h>#include <stdlib.h>#include <math.h>double y;double dao(double x){    return 42 * pow(x,6) + 48 * pow(x,5) + 21 * pow(x,2) + 10 * x;}double shu(double x){    return 6 * pow(x,7) + 8 * pow(x,6) + 7 * pow(x,3) + 5 * pow(x,2) - y * x;//注意圆角半角别敲错}int main(){    int t;    double left,right,mid;    scanf("%d",&t);    while(t--)    {        scanf("%lf",&y);        if(dao(100.0) - y <= 0)//单调递减,等于零是有可能在100处取到极值点        {            printf("%.4lf",shu(100.0));            continue;        }        left = 0.0;        right = 100.0;        while(right - left > 1e-5)//-4不行,得-5,不然会错误        {            mid =  (left + right) / 2;            if(dao(mid) - y < 0)                left = mid;            else                right = mid;        }        printf("%.4lf\n",shu(mid));    }    return 0;}

1e-10就是“aeb”的形式,表示a乘以10的b次方。其中b必须是整数,a可以是小数

0 0