HDU 4798 - Skycity

时间:2021-07-30 22:48:29

告诉你一幢楼的高度,楼的层数,每层一样高。

每一层的底边是一个圆,下一层的玻璃一定要包括进上一层的底边。

每层玻璃铺成棱柱形,玻璃有最小面积限制。

问你这层楼最小的总玻璃数是多少。

求出每层最小的玻璃块数,然后直接计算即可。

 #include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const double PI=*atan();
int F;
double R,r,H,s;
double r1,r0,h,ans;
double cal(int x,double rr)
{
return 2.0*rr*tan(PI/x)*h;
}
double div2(double rr)
{
int l=,r=1e6,mid;
while(l<=r)
{
mid=(l+r)>>;
if(cal(mid,rr)>s-1e-) l=mid+;
else r=mid-;
}
return cal(l-,rr)*(l-);
}
int main()
{
while(~scanf("%lf%lf%lf%d%lf",&R,&r,&H,&F,&s))
{
r0=(R-r)*1.0/F;
h=H*1.0/F;
ans=;
for(int i=;i<F;i++)
{
ans+=div2(r+r0*i);
}
printf("%.3f\n",ans);
}
}