LeeBlog

导航

HDU 2899 Strange fuction

这题是以水题,开始被他唬了,后来听唐聪一说又是以单调,这个函数的倒数在0-100内事单调递增的,如果Y小于0,在0时导数值是大于0的,显然这是函数一直是递增的,所以最小值在0处产生,当Y大于0,求出X使得导数值等于0(二分),此时函数取得最小值,所以又是一水题啊

#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
double x,y,z;
inline double fax( double x )
{
       return 6 * pow( x, 7 ) + 8 * pow( x,6 ) + 7 * pow( x,3 ) + 5 * x * x - y * x;
       }
inline double mini( double x )
{
       return 42 * pow( x,6 )+ 48 * pow( x,5 ) + 21 * x * x + 10 * x - y ;
       }
int main( )
{
    int t;
    scanf( "%d",&t );
    while( t-- )
    {
           double min;
           cin>>y;
           if( y <= 0 )
               min = 0;
           else
           {
               double a = 0,b = 100,mid = 50;
               double e1 = mini( a ),e2 = mini( mid ),e3 = mini( b );
               while( fabs( e1 - e3 ) > 0.0001 )
               {
                      if( e1 * e2 < 0 )
                      {
                          b = mid;
                          e3 = e2;
                          mid = ( a + b ) / 2;
                          e2 = mini( mid );
                      }
                      else
                      {
                          a = mid;
                          e1 = e2;
                          mid = ( a + b ) / 2;
                          e2 = mini( mid );
                      }
                      min = mid;
                      }
               
           }
           printf( "%.4lf\n",fax( min ) );
           }
    return 0;
}

posted on 2011-03-22 19:28  LeeBlog  阅读(198)  评论(0编辑  收藏  举报