• 洛谷#CF342C#Cupboard and Balloons


    更好的阅读体验

    我的博客观看

    Cupboard and Balloons

    给定r和h,有一个立体图形
    下部为宽r,长2r,高h的矩形
    上部为宽r,正面为半径为r的半圆的立体图形
    具体就看下面的图啦

    解法


    如图,我们可以看到,一种情况是下面都两个两个填,最上面能填两个
    还有一种是下面填不到两个,只能上面填一个
    最后一种是最上面填了三个
    那怎么判断呢
    首先,最上面的部分,至少能填一个在正中间的
    然后我们判断一下是否可以从一个变成两个,这样明显优一点
    我们考虑到当最底下的都填完之后,会剩下一部分,多余的mo=h-h/r*r
    当mo>r/2的时候,就可以在中间填两个
    如果能填两个,再考虑能否在中间加入第三个
    我们看第三幅图,当AB>=r时,就可以填入第三个
    即AC2+BC2>=r^2
    AC=r/2,BC=mo
    全部带进去,化简过程在代码底部也有
    就可以求出来了

    ac代码

    #include<bits/stdc++.h>
    using namespace std;
    int r,h,ans,mo;
    int main()
    {
    	scanf("%d%d",&r,&h);
    	ans=h/r*2+1;
    	mo=h-h/r*r;
    	if(mo*2>=r)
    	{
    		ans++;
    		if(1ll*4*mo*mo>=1ll*3*r*r)ans++;
    	}
    	printf("%d
    ",ans);
        return 0;
    }
    /*
    mo^2+(r/2)^2>=r
    4*mo^2+r^2>=4*r^2
    4*mo^2>=3*r^2
    */
    
  • 相关阅读:
    创建github怎样管理
    端口号的作用
    正则
    分布式代码管理github
    实现MVC
    AngularJS核心特性(四大点)
    什么是跨域,什么是同源
    rem怎么计算
    正则须知(以后还会添加)
    LA 6448 Credit Card Payment
  • 原文地址:https://www.cnblogs.com/muronglin/p/luogu-cf342c.html
Copyright © 2020-2023  润新知