HDU 2899 Strange fuction(二分)

5408 ワード

Strange fuction
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1840    Accepted Submission(s): 1364
Problem Description
Now, here is a fuction:
  F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)
Can you find the minimum value when x is between 0 and 100.
 
 
Input
The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has only one real numbers Y.(0 < Y <1e10)
 
 
Output
Just the minimum value (accurate up to 4 decimal places),when x is between 0 and 100.
 
 
Sample Input
2
100
 
200
 
 
Sample Output
-74.4291
-178.8534
 
 
Author
Redow
 
 
Recommend
lcy
 
 
       ,         :G(x) = 42 * x^6+48*x^5+21*x^2+10*x-y (0 <= x <=100)
      ,             。           0,             。
 F(100)  ;           0,             , F(0)  。           
           ,        ,             。                  。
          2  .



#include<iostream>

#include<cstdio>

#include<cmath>



using namespace std;



#define eps 1e-10



double y;



double g(double x){

    return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x;

}



double f(double x){

    return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x;;

}



int main(){



    //freopen("input.txt","r",stdin);



    int t;

    double left,right,mid;

    scanf("%d",&t);

    while(t--){

        scanf("%lf",&y);

        if(g(100.0)-y<=0){

            printf("%.4lf
",f(100.0)); continue; } left=0; right=100; while(right-left>=eps){ mid=(right+left)/2; if(g(mid)-y<eps) left=mid; else right=mid; } printf("%.4lf
",f(mid)); } return 0; }