poj3737 裸三分!
Posted 方方的小迷妹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj3737 裸三分!相关的知识,希望对你有一定的参考价值。
这道题吧,就是一个裸的三分。。。
一开始我没看到是圆锥,wa了
然后没看到是多组输入,wa了
还没用EOF,又wa了
最后,三分浮点数,精度设置1e-4,太低,wa了
emmmmmmm 设置了1e-6终于过了啊太艰辛了
哦对了,推出来r和s的变化是先增后减的,符合三分的条件。。。
上代码,好艰辛
#include<iostream> #include<cstdio> #include<cstring> #include<stack> #include<queue> #include<vector> #include<cmath> #include<algorithm> #define ll long long const double pi=acos(-1.0); #define eps 0.0001 using namespace std; double s; double cal(double r){ double l = s/(pi*r) - r; double h = sqrt(l*l - r*r); return pi*r*r*h/3; }//既然是求最优值,那么有的时候就是小数,所以用double double san_fen(double l0,double r0){ double l = l0,r = r0,lmid,rmid,v1,v2; while(r - l > eps){//浮点数的比较,eps为误差 lmid = l + (r-l)/3; rmid = r - (r-l)/3; //或者 lmid = (2*l + r)/3,rmid = (l + r*2 + 2)/3; v1 = cal(lmid); v2 = cal(rmid); if(v1 < v2) l = lmid;//寻找的是最大值 else r = rmid; } return r; } int main(){ while(scanf("%lf",&s) != EOF){ double r; r = s/pi; r = sqrt(r); r = san_fen(0,r); double l = s/(pi*r) - 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; }
我怕不是个傻逼
以上是关于poj3737 裸三分!的主要内容,如果未能解决你的问题,请参考以下文章