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;
}

  

posted @ 2018-09-20 21:14  古城独钓  阅读(224)  评论(0)    收藏  举报