POJ 3737
一道三分的题目
我是三分的底面面积
可以分析道总体积和底面面积是二次函数关系
于是在二次函数的两端三分
逐步逼近二次函数的最大值
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const double eps=1e-8;
const double pi=3.1415926;
inline double liu(double x){
return x<0?-x:x;
}
inline int dcmp(double x,double y){
double res=x-y;
if(liu(res)<eps) return 0;
if(res<0) return -1;
return 1;
}
double s;
inline double cal(double x){
double s1=s-x;
double r=sqrt(x/pi);
double R=2*s1/(2*r*pi);
double h=sqrt(R*R-r*r);
return h*x/3;
}
int main(){
while(scanf("%lf",&s)!=EOF){
double l=0,r=s/2;
while(dcmp(l,r)<0){
double l1=(2*l+r)/3,r1=(l+2*r)/3;
double v1=cal(l1),v2=cal(r1);
int d=dcmp(v1,v2);
if(d==0) l=l1,r=r1;
if(d<0) l=l1;
if(d>0) r=r1;
// cout<<l<<"\t"<<r<<"\t"<<endl;
}
// cout<<l<<endl;
double ans1=cal(l);
double ans3=sqrt(l/pi);
double R=2*(s-l)/(2*ans3*pi);
double ans2=sqrt(R*R-ans3*ans3);
// cout<<R<<"\t"<<ans3<<endl;
printf("%.2lf\n%.2lf\n%.2lf\n",ans1,ans2,ans3);
}
return 0;
}

浙公网安备 33010602011771号