ZOJ3733_Skycity

这。。。水题。可惜坑了无数发。

显然对于当前的半径的园,多边形的边数越多,周长越短,面积也就越小。

一开始我是用二分去做的,事实证明也是可以的,只是我坑了。

其实没必要去用二分哦,这样来考虑这问题。

每次我都用最短允许的边与圆相切,看看这条边所占的角度有多大,这样就可以直接得出多少边形了。。。。(神坑吧)

接下来直接根据边数算出面积,就得答案了。   这才是真正的全场最水题啊。。。。。啊啊。。嗄。 吖a.a..。 阿。。

精度问题也都不用考虑。。。。。

#include <cstdio>
#include <cmath>
using namespace std;
const double full=2*acos(-1.0);

double R,r,H,S,ang,l,h,ans,cur,len,dr;
int n,F;

int main()
{
    while (scanf("%lf%lf%lf%d%lf",&R,&r,&H,&F,&S)!=EOF)
    {
        h=H/F,ans=0,cur=r,dr=(R-r)/F,l=S/h;
        while (F--)
        {
            ang=2*atan(l/(2*cur));
            n=(int)(full/ang); 
            ans+=tan(full/(2*n))*cur*2*n;
            cur+=dr;
        }
        printf("%.3f
",ans*h);
    }
    return 0;
}
如有转载,请注明出处(http://www.cnblogs.com/lochan)
原文地址:https://www.cnblogs.com/lochan/p/3454571.html