poj3737_三分求极值

来源:互联网 发布:三星k2200网络打印 编辑:程序博客网 时间:2024/05/01 19:49

//分析的话就要看一下三分的思想,此题最悲剧的是刚开始用g++编译器,wa的我好惨,后来用c++编译器就过了,看来以后要用c++编译器了,可能是由于精度的问题吧

#include<iostream>

#include<cstdio>

#include<cmath>

using namespace std;

 

double s,h;

const double pi=3.141592653589793238;

 

double v(double r)

{

    h=sqrt(pow((s-pi*r*r)/(pi*r),2.0)-r*r);

    return pi*r*r*h/3.0;

}

 

int main()

{

    while(scanf("%lf",&s)!=EOF)

    {

        double left=0.0,right=sqrt(s/(2.0*pi));

        double m,mm;

        while(left+1e-11<right)

        {

            m=(left+right)/2.0;

            mm=(m+right)/2.0;

            if(v(m)>v(mm))right=mm;

            else

            left=m;

        }

        printf("%.2lf/n%.2lf/n%.2lf/n",v(left),h,left);

    }

    return 0;

}

原创粉丝点击