zoukankan      html  css  js  c++  java
  • ACM : HDU 2899 Strange fuction 解题报告 -二分、三分

    Strange fuction
    
    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 5933    Accepted Submission(s): 4194
    
    
    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
     

    //三分二分都可以,导数单调,求导后二分值 AC代码

      

     1 #include"iostream"
     2 #include"algorithm"
     3 #include"cstdio"
     4 #include"cstring"
     5 #include"cmath"
     6 #define max(a,b) a>b?a:b
     7 #define min(a,b) a<b?a:b
     8 #define MX 10000 + 50
     9 using namespace std;
    10 double y;
    11 
    12 double f(double x) {              //求导
    13     return 42*pow(x,6)+48*pow(x,5)+21*x*x+10*x-y; //  F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)
    14 }
    15 
    16 double F(double x) {
    17     return 6 * pow(x,7)+8*pow(x,6)+7*x*x*x+5*x*x-y*x;//  F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)
    18 }
    19 
    20 int main() {
    21     int T;
    22     while(cin>>T) {
    23         for(int qq=0; qq<T; qq++) {
    24             cin>>y;
    25             if(f(0)>0) {
    26                 printf("%.4f
    ",F(0));
    27             } else if(f(100)<0) {
    28                 printf("%.4f
    ",F(100));
    29             } else {
    30                 double l=0;                //     0     l                r    100
    31                 double r=100;           //   -------------------------
    32                 double mid;
    33                 while(r-l>1e-8) {
    34                     mid=(r+l)/2.0;
    35                     if(f(mid)>0) {
    36                         r=mid;
    37                     } else {
    38                         l=mid;
    39                     }
    40                 }
    41                 printf("%.4f
    ",F(mid));
    42             }
    43         }
    44     }
    45     return 0;
    46 }
    View Code
  • 相关阅读:
    Aspect Oriented Programming
    jsp01
    监听器
    Java编写验证码
    servlet07
    MySQL02
    MySQL01
    Java的jdk1.6与jre1.8中存在的差异
    登陆验证和二级联动
    ajax和json
  • 原文地址:https://www.cnblogs.com/HDMaxfun/p/5693728.html
Copyright © 2011-2022 走看看