HDU 4798

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

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

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

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

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

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 using namespace std;
 5 const double PI=4*atan(1);
 6 int F;
 7 double R,r,H,s;
 8 double r1,r0,h,ans;
 9 double cal(int x,double rr)
10 {
11     return 2.0*rr*tan(PI/x)*h;
12 }
13 double div2(double rr)
14 {
15     int l=3,r=1e6,mid;
16     while(l<=r)
17     {
18         mid=(l+r)>>1;
19         if(cal(mid,rr)>s-1e-8) l=mid+1;
20         else r=mid-1;
21     }
22     return cal(l-1,rr)*(l-1);
23 }
24 int main()
25 {
26     while(~scanf("%lf%lf%lf%d%lf",&R,&r,&H,&F,&s))
27     {
28         r0=(R-r)*1.0/F;
29         h=H*1.0/F;
30         ans=0;
31         for(int i=0;i<F;i++)
32         {
33             ans+=div2(r+r0*i);
34         }
35         printf("%.3f
",ans);
36     }
37 }
我自倾杯,君且随意
原文地址:https://www.cnblogs.com/nicetomeetu/p/5682826.html