三分(整数和浮点数模板)

三分(整数和浮点数模板)
三分(整数和浮点数模板)

1.UmBasketella https://vjudge.net/contest/419540#problem/J(浮点数三分)

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

const double pi = acos(-1.0);
double s;
const double eps = 1e-6;

double cacl(double x){
	
	double l = (s - pi * x * x) / pi / x;//算pi * r的时候不能是/pi * r
	//只能是/pi / r 或者是/(pi * r); 
	double h = sqrt(l * l - x * x);
	double v = pi * x * x * h / 3;
	
	return v;
}

int main(){
	
	while(~scanf("%lf",&s)){//这里没有告诉输入几组的时候,需要在scanf前面加上~,具体原因在后面解释
	//或者用cin读入,或者scanf()!= EOF 不然的话会OLE
		
		double mid,rmid,low = 0.0,up = sqrt(s / pi);//这右边界是放缩过得
		//去掉了表面积中的侧面积一部分的面积,这样的r会变大,但不会影响什么
		while(up - low > eps){//精度
			
			mid = (up + low) / 2;//中值
			rmid = (mid + up) / 2;//中值与右边界的右中值
			
			if(cacl(mid) < cacl(rmid)) low = mid;//计算最大值 因为中值小于右中值
			//则最大值因位于中值与右边界中,提高下限
			else up = rmid;
			
		}
		double r = low;
		double l = (s - pi * r * r) / pi / r;
		double h = sqrt(l * l - r * r);
		double v = pi * r * r * h / 3;
		
		printf("%.2f\n%.2f\n%.2f\n",v,h,r);
	}
	return 0;
}

这道题出现了一个问题,就是OLE,输出超出限制,具体原因在这

Output Limit Exceed错误原因

上一篇:[学习笔记]优化基础技巧


下一篇:【模板】三分法