这。。。水题。可惜坑了无数发。
显然对于当前的半径的园,多边形的边数越多,周长越短,面积也就越小。
一开始我是用二分去做的,事实证明也是可以的,只是我坑了。
其实没必要去用二分哦,这样来考虑这问题。
每次我都用最短允许的边与圆相切,看看这条边所占的角度有多大,这样就可以直接得出多少边形了。。。。(神坑吧)
接下来直接根据边数算出面积,就得答案了。 这才是真正的全场最水题啊。。。。。啊啊。。嗄。 吖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;
}