Cupboard and Balloons

来源:互联网 发布:kms10激活软件是什么 编辑:程序博客网 时间:2024/06/05 04:21

题意分析:一个由长方体和半球组成的柜子,深为r,横截面矩形高为h,宽为2*r,半圆的半径为r,将直径为r的球放进柜子里,求最多能放置多少个。

                    首先在长方体内放球,完全在长方体内的球可以放(h/r)*2个,矩形剩余高度为h',然后判断剩下区域能放一个球还是两个球。感觉自己写的比较麻烦,

                    判断临界条件即刚好能放置两个球时h' == r.然后根据这个找到一般情况下圆心的坐标,判断两点之间的距离,若大于直径则还可以再放一个球,纯数学问题。

#include<cstdio>#include<string>#include<cstdlib>#include<cmath>#include<iostream>#include<cstring>#include<set>#include<queue>#include<string>#include <algorithm>#include<vector>using namespace std;const int maxn = 100010;const double eps  = 1e-9;int main(){    long long r, h;    scanf("%I64d%I64d",&r,&h);    long long ans = 0;    double h1,h2,h3;    ans = (long long)((h * 1.0 + r / 2.0) / r);    h1 = ans * (double)r;    h2 = sqrt(3.0) /  2 * r;    h3  = h2 - h1 + h;    double hh = sqrt(3.0) /  2.0 * r - h3;    hh -= (r / 2.0);    ans *= 2;    double dd = r * r / 4.0  + (hh - r /  2.0) * (hh - r / 2.0);    if(dd - r * r >= eps) ans++;    printf("%I64d\n",ans);    return 0;}
但看了网上一个博客,他的判断条件就很简单点击打开链接

0 0
原创粉丝点击