您的位置:首页 > 其它

HDU 4798 - Skycity

2016-07-18 22:12 459 查看
告诉你一幢楼的高度,楼的层数,每层一样高。

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

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

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

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

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const double PI=4*atan(1);
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=3,r=1e6,mid;
while(l<=r)
{
mid=(l+r)>>1;
if(cal(mid,rr)>s-1e-8) l=mid+1;
else r=mid-1;
}
return cal(l-1,rr)*(l-1);
}
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=0;
for(int i=0;i<F;i++)
{
ans+=div2(r+r0*i);
}
printf("%.3f\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: