ZOJ3733 Skycity

来源:互联网 发布:鞋子淘宝 编辑:程序博客网 时间:2024/05/18 18:03

这个题现场自己压根没有去看过一眼……而且本身作为一个阅读理解题,无论是配图还是样例还是Clarification都是那么不友好……

自己看这个题看了好几遍都没有理解,今天也总算是理解了。


首先这个建筑在大前提下是一个圆台……不是那种圆柱垒起来那种样子,这里配图就感觉很奇怪……

然后安玻璃按照常理都是都是沿着下底面安吧……那样才安装的上啊……表示非常不能理解。


只要这两点搞清楚就没有难度了。

因为是一个圆台,每一层玻璃要围住的圆的半径就知道了,说白了就是等差的。

半径知道了就可以二分判断这层用正几边形来围,那个S就是来check的。

累计每一层的答案就行了……

#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;int R , r , H , F , S;double radius , ans , height , dr , pi = acos(-1.);double check(){    int top = 3 , mid , bot = 1e5;    double res = 1e60;    while (top < bot)    {        mid = top + bot + 1 >> 1;        double theta = pi / mid;        double area = (2 * radius * tan(theta)) * height;        if (area >= S)            top = mid , res = area * mid;        else bot = mid - 1;    }    return res;}void work(){    ans = 0 , height = 1. * H / F , dr = 1. * (R - r) / F , radius = r;    for (int i = 0 ; i < F ; ++ i , radius += dr)        ans += check();    printf("%f\n" , ans);}int main(){    while (~scanf("%d%d%d%d%d",&R , &r , &H , &F , &S))        work();    return 0;}
原创粉丝点击