zoukankan      html  css  js  c++  java
  • CodeForces 342C Cupboard and Balloons (几何问题)

    题意:给定一个 r 和 h,r 是上面那个半球的半径,h 是下面那个圆柱的高度,然后有一些半径为 r/2的气球,问你最多能放几个。

    析:根据题意,很容易知道,先从下面往上放,两个两个的放,放到不能放的时候,再计算在上面是不是还能再放一个。这样是最多的,关键是计算上面那能不能放上,用到几何中的两圆的位置关系,

    可以看出从下往上放气球的时候,球心最高只能到半球和圆柱的交线处,所以我们就可以很轻松计算两个两个的放,最多可以放几组,也就是h + r 整除以 r,要整数,然后再计算以后那一个圆,

    那个圆最高就是恰好的那个半球相切,我们可以以半球心为原点,建立坐标系,那么圆就是(0, r/2),然后再计算最上面那个圆是不是和它相离或相切,如果是就可以放上,如果不是,就放不上。

    代码如下:

    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn = 33333 + 5;
    typedef long long LL;
    const double eps = 1e-9;
    int a[10];
    
    int main(){
        LL r, h;
        while(cin >> r >> h){
            double rr = r * 1.0/ 2.0;
            double x = rr + (double)h;
            LL ans = (LL)(x / r);
            double y = sqrt(3)/2.0 * r + h - ans * r;
            double yy = sqrt(3)/2.0 * r - y;
            yy -= rr;
            double d = rr * rr + (yy - rr) * (yy - rr);
            if(d - 4*rr*rr > eps)  cout << ans * 2 + 1 << endl;
            else cout << ans * 2 << endl;
        }
        return 0;
    }
    
  • 相关阅读:
    Linux 三剑客之SED
    搭建Docker环境
    Docker rabbitmq
    Docker Redis 集群
    Docker Mysql
    lerna 大前端项目代码重用解决方案
    将create-react-app从javascript迁移到typescript
    使用 React hooks 优雅解决 mp3 的播放 和 暂停
    React 代码 Import Svg as ReactComponent 失败
    vue3 自定义 hooks 优雅处理异步调用 ajax
  • 原文地址:https://www.cnblogs.com/dwtfukgv/p/5653344.html
Copyright © 2011-2022 走看看