HDU2899

来源:互联网 发布:mac os 磁盘分区 编辑:程序博客网 时间:2024/04/28 07:46
  /*求一阶导数,可知在0到100范围内导数单调递增,如果在0点处导数大于零,那么原函数在区间内单调
递增,那么在0处取得最小值,如果在点100处导数小于零,那么原函数在区间呢单调递减,在0处取得最小值
如果导数有增有减,因为是递增导函数,那么肯定是先负后正,那么只要求导函数的零点就是原函数的最小值点
*/
#include<stdio.h>
#include<math.h>
#define ex 1e-8
double F(double y,double x)
{
  return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*x*x-y*x;
}
double f(double y,double x)
{
  return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y;
}
int main()
{
   int T;
   double y;
   scanf("%d",&T);
   while(T--)
  {
    scanf("%lf",&y);
    if(f(y,0.0)>0) { printf("%.4lf\n",F(y,0.0)); continue;}
    if(f(y,100.0)<0) { printf("%.4lf\n",F(y,100.0)); continue;}
    double st=0,en=100,mid;
    while(en-st>ex)
   {
    mid=(st+en)/2;
     if(f(y,mid)<0)
     {
    
      st=mid;
     }
   else en=mid;
   }
  printf("%.4lf\n",F(y,mid));
 }
 return 0;
}
原创粉丝点击